Index: pipewire/Cargo.toml
===================================================================
--- pipewire.orig/Cargo.toml
+++ pipewire/Cargo.toml
@@ -45,7 +45,7 @@ version = "2"
 version = "0.2"
 
 [dependencies.nix]
-version = "0.27"
+version = "0.29"
 features = [
     "signal",
     "fs",
Index: pipewire/src/channel.rs
===================================================================
--- pipewire.orig/src/channel.rs
+++ pipewire/src/channel.rs
@@ -162,7 +162,7 @@ impl<T> Sender<T> {
         // If no messages are waiting already, signal the receiver to read some.
         // Because the channel mutex is locked, it is alright to do this before pushing the message.
         if channel.queue.is_empty() {
-            match nix::unistd::write(channel.writefd, &[1u8]) {
+            match nix::unistd::write(unsafe { BorrowedFd::borrow_raw(channel.writefd) } , &[1u8]) {
                 Ok(_) => (),
                 Err(_) => return Err(t),
             }
@@ -207,8 +207,8 @@ where
     let fds = nix::unistd::pipe2(nix::fcntl::OFlag::O_CLOEXEC).unwrap();
 
     let channel: Arc<Mutex<Channel<T>>> = Arc::new(Mutex::new(Channel {
-        readfd: fds.0,
-        writefd: fds.1,
+        readfd: fds.0.into_raw_fd(),
+        writefd: fds.1.into_raw_fd(),
         queue: VecDeque::new(),
     }));
 
