Backed out 3 changesets (bug 1512445) Build bustage
authorDorel Luca <dluca@mozilla.com>
Wed, 06 Mar 2019 23:28:37 +0200
changeset 462724 873b90887e3af682383dea7a7e1fb52d6ec02960
parent 462723 67bda35b975de19314623a9ee2ff89b3048081f6
child 462725 01a347dc3993e9b0b06fa7d138d4b89e9039d950
push id79817
push userdluca@mozilla.com
push dateWed, 06 Mar 2019 21:29:13 +0000
treeherderautoland@873b90887e3a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1512445
milestone67.0a1
backs outb954e5d0324ab00a6ccc5fa605181b18a0bab2d5
04c1982c1a7e914aeac4ff0fc1e5a9d280470407
0a78b7e72e1bf620cd70608abb7f31f389f87fcc
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 3 changesets (bug 1512445) Build bustage Backed out changeset b954e5d0324a (bug 1512445) Backed out changeset 04c1982c1a7e (bug 1512445) Backed out changeset 0a78b7e72e1b (bug 1512445)
Cargo.lock
dom/media/CubebUtils.cpp
media/audioipc/README_MOZILLA
media/audioipc/audioipc/Cargo.toml
media/audioipc/audioipc/src/async.rs
media/audioipc/audioipc/src/fd_passing.rs
media/audioipc/audioipc/src/handle_passing.rs
media/audioipc/audioipc/src/lib.rs
media/audioipc/audioipc/src/messages.rs
media/audioipc/audioipc/src/messagestream_unix.rs
media/audioipc/audioipc/src/messagestream_win.rs
media/audioipc/audioipc/src/tokio_named_pipes.rs
media/audioipc/client/Cargo.toml
media/audioipc/client/src/context.rs
media/audioipc/client/src/lib.rs
media/audioipc/client/src/stream.rs
media/audioipc/register-collection-not-supported.patch
media/audioipc/server/Cargo.toml
media/audioipc/server/src/lib.rs
media/audioipc/server/src/server.rs
media/audioipc/update.sh
third_party/rust/cubeb-backend/.cargo-checksum.json
third_party/rust/cubeb-backend/Cargo.toml
third_party/rust/cubeb-core/.cargo-checksum.json
third_party/rust/cubeb-core/Cargo.toml
third_party/rust/cubeb-sys/.cargo-checksum.json
third_party/rust/cubeb-sys/Cargo.toml
third_party/rust/cubeb-sys/build.rs
third_party/rust/cubeb-sys/src/channel.rs
third_party/rust/cubeb/.cargo-checksum.json
third_party/rust/cubeb/Cargo.toml
third_party/rust/mio-named-pipes/.cargo-checksum.json
third_party/rust/mio-named-pipes/Cargo.toml
third_party/rust/mio-named-pipes/LICENSE-APACHE
third_party/rust/mio-named-pipes/LICENSE-MIT
third_party/rust/mio-named-pipes/README.md
third_party/rust/mio-named-pipes/appveyor.yml
third_party/rust/mio-named-pipes/src/from_raw_arc.rs
third_party/rust/mio-named-pipes/src/lib.rs
third_party/rust/mio-named-pipes/tests/smoke.rs
toolkit/library/rust/gkrust-features.mozbuild
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -85,56 +85,53 @@ dependencies = [
 ]
 
 [[package]]
 name = "audioipc"
 version = "0.2.4"
 dependencies = [
  "bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "cc 1.0.23 (git+https://github.com/glandium/cc-rs?branch=1.0.23-clang-cl-aarch64)",
- "cubeb 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "memmap 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-named-pipes 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "scoped-tls 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde_derive 1.0.80 (git+https://github.com/servo/serde?branch=deserialize_from_enums9)",
  "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.6 (git+https://github.com/froydnj/winapi-rs?branch=aarch64)",
 ]
 
 [[package]]
 name = "audioipc-client"
 version = "0.4.0"
 dependencies = [
  "audioipc 0.2.4",
- "cubeb-backend 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb-backend 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "foreign-types 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "audioipc-server"
 version = "0.2.3"
 dependencies = [
  "audioipc 0.2.4",
  "bytes 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "cubeb-core 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb-core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "error-chain 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "futures 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazycell 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
  "tokio-uds 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -669,55 +666,56 @@ version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "procedural-masquerade 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cubeb"
-version = "0.5.3"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cubeb-core 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb-core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cubeb-backend"
-version = "0.5.3"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
- "cubeb-core 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb-core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cubeb-core"
-version = "0.5.3"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "cubeb-sys 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cubeb-pulse"
 version = "0.2.0"
 dependencies = [
- "cubeb-backend 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb-backend 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "pulse 0.2.0",
  "pulse-ffi 0.1.0",
  "semver 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cubeb-sys"
-version = "0.5.3"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "cmake 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
+ "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
  "pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "darling"
 version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -1115,17 +1113,17 @@ dependencies = [
 name = "gkrust-shared"
 version = "0.1.0"
 dependencies = [
  "arrayvec 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "audioipc-client 0.4.0",
  "audioipc-server 0.2.3",
  "cose-c 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "cubeb-pulse 0.2.0",
- "cubeb-sys 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cubeb-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding_c 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "encoding_glue 0.1.0",
  "env_logger 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "geckoservo 0.0.1",
  "gkrust_utils 0.1.0",
  "jsrust_shared 0.1.0",
  "kvstore 0.1.0",
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1624,28 +1622,16 @@ dependencies = [
  "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)",
  "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
-name = "mio-named-pipes"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)",
- "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
 name = "mio-uds"
 version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
@@ -3363,20 +3349,20 @@ dependencies = [
 "checksum crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2af0e75710d6181e234c8ecc79f14a97907850a541b13b0be1dd10992f2e4620"
 "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9"
 "checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b"
 "checksum crossbeam-utils 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "41ee4864f4797060e52044376f7d107429ce1fb43460021b126424b7180ee21a"
 "checksum cssparser 0.25.0 (registry+https://github.com/rust-lang/crates.io-index)" = "730363a45c4e248d4f21d3e5c1156d1a9cdec0855056c0d9539e814bc59865c3"
 "checksum cssparser-macros 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f3a5383ae18dbfdeb569ed62019f5bddb2a95cd2d3833313c475a0d014777805"
 "checksum cstr 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b6557bdb1dc9647eae1cf7f5601b14cd45fc3c7ccf2df618387416fe542da6ea"
 "checksum cstr-macros 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0472c17c83d3ec1af32fb6ee2b3ad56ae0b6e69355d63d1d30602055c34324a8"
-"checksum cubeb 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "dc64b2be0dfd32842b5ce7db6fe8c1ea8e7735ad501ca4aef5bb3b6032535cea"
-"checksum cubeb-backend 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3d85f392da233639c311338ece5f4cd5df443ffb35fa3232f172cc7f2a7ce3c4"
-"checksum cubeb-core 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e5e526ad2a1ae7d1443c9dd0c67c32d3c317f8556bfd8cf8827a629ee4cbf974"
-"checksum cubeb-sys 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "01f633e04a9788ebbea80af3b03505ac2bd2ee4196c19ec6f618025b55e3c1a8"
+"checksum cubeb 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8a3502aafa1bf95c524f65d2ba46d8741700c6a8a9543ea52c6da3d8b69a2896"
+"checksum cubeb-backend 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0432a0d08c3f9a778a2b0b6214c87ec2eb17e8639eb68baf0686bdafc4fd11f1"
+"checksum cubeb-core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37f7b20f757a4e4b6aa28863236551bff77682dc6db192eba15af615492b5445"
+"checksum cubeb-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "653b9e245d35dbe2a2da7c4586275cee75ff656ddeb02d4a73b4afdfa6d67502"
 "checksum darling 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f593353cad5af2df6d54810de2b61aa8acba5b5fbc70b0d75e7cc5bdd80aca73"
 "checksum darling_core 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "168c246e87e727d58575d9b4595491010627f0cdc910e3e6ea3b36db2b9a9d9a"
 "checksum darling_macro 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "99c4eff4bcbeaf6a22578012ff79c95910338668278d1901e528bd34a22f575d"
 "checksum derive_more 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f57d78cf3bd45270dad4e70c21ec77a960b36c7a841ff9db76aaa775a8fb871"
 "checksum devd-rs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e7c9ac481c38baf400d3b732e4a06850dfaa491d1b6379a249d9d40d14c2434c"
 "checksum diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a"
 "checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90"
 "checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c"
@@ -3448,17 +3434,16 @@ dependencies = [
 "checksum memchr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "148fab2e51b4f1cfc66da2a7c32981d1d3c083a803978268bb11fe4b86925e7a"
 "checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d"
 "checksum memmap 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46f3c7359028b31999287dae4e5047ddfe90a23b7dca2282ce759b491080c99b"
 "checksum memmap 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e2ffa2c986de11a9df78620c01eeaaf27d94d3ff02bf81bfcca953102dd0c6ff"
 "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
 "checksum miniz_oxide 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "aaa2d3ad070f428fffbd7d3ca2ea20bb0d8cffe9024405c44e1840bc1418b398"
 "checksum miniz_oxide_c_api 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "92d98fdbd6145645828069b37ea92ca3de225e000d80702da25c20d3584b38a5"
 "checksum mio 0.6.15 (registry+https://github.com/rust-lang/crates.io-index)" = "4fcfcb32d63961fb6f367bfd5d21e4600b92cd310f71f9dca25acae196eb1560"
-"checksum mio-named-pipes 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "82f43a815b57d2d652550f3d20cec88a495bb2d0956aa873dc43040278455677"
 "checksum mio-uds 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "1731a873077147b626d89cc6c2a0db6288d607496c5d10c0cfcf3adc697ec673"
 "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
 "checksum moz_cbor 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20c82a57087fd5990d7122dbff1607c3b20c3d2958e9d9ad9765aab415e2c91c"
 "checksum mp4parse_fallible 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6626c2aef76eb8f984eef02e475883d3fe9112e114720446c5810fc5f045cd30"
 "checksum msdos_time 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aad9dfe950c057b1bfe9c1f2aa51583a8468ef2a5baba2ebbe06d775efeb7729"
 "checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0"
 "checksum new_debug_unreachable 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0cdc457076c78ab54d5e0d6fa7c47981757f1e34dc39ff92787f217dede586c4"
 "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
--- a/dom/media/CubebUtils.cpp
+++ b/dom/media/CubebUtils.cpp
@@ -49,17 +49,17 @@
 #define PREF_CUBEB_FORCE_NULL_CONTEXT "media.cubeb.force_null_context"
 // Hidden pref to disable BMO 1427011 experiment; can be removed once proven.
 #define PREF_CUBEB_DISABLE_DEVICE_SWITCHING \
   "media.cubeb.disable_device_switching"
 #define PREF_CUBEB_SANDBOX "media.cubeb.sandbox"
 #define PREF_AUDIOIPC_POOL_SIZE "media.audioipc.pool_size"
 #define PREF_AUDIOIPC_STACK_SIZE "media.audioipc.stack_size"
 
-#if (defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)) || defined(XP_MACOSX) || defined(XP_WIN)
+#if (defined(XP_LINUX) && !defined(MOZ_WIDGET_ANDROID)) || defined(XP_MACOSX)
 #  define MOZ_CUBEB_REMOTING
 #endif
 
 extern "C" {
 
 // This must match AudioIpcInitParams in media/audioipc/client/src/lib.rs.
 // TODO: Generate this from the Rust definition rather than duplicating it.
 struct AudioIpcInitParams {
--- a/media/audioipc/README_MOZILLA
+++ b/media/audioipc/README_MOZILLA
@@ -1,8 +1,8 @@
 The source from this directory was copied from the audioipc-2
 git repository using the update.sh script.  The only changes
 made were those applied by update.sh and the addition of
 Makefile.in build files for the Mozilla build system.
 
 The audioipc-2 git repository is: https://github.com/djg/audioipc-2.git
 
-The git commit ID used was 9600391d94854d971ed723e3499c0ab8ede3045b (2019-03-05 15:05:43 +1300)
+The git commit ID used was c2148b95128f5e54ef1d18e5e457a2fa45e7ac43 (2019-02-05 15:18:22 +1300)
--- a/media/audioipc/audioipc/Cargo.toml
+++ b/media/audioipc/audioipc/Cargo.toml
@@ -3,31 +3,26 @@ name = "audioipc"
 version = "0.2.4"
 authors = [
         "Matthew Gregan <kinetik@flim.org>",
         "Dan Glastonbury <dan.glastonbury@gmail.com>"
         ]
 description = "Remote Cubeb IPC"
 
 [dependencies]
-cubeb = "0.5.3"
+cubeb = "0.5.2"
 bincode = "1.0"
 bytes = "0.4"
 futures = "0.1.18"
 iovec = "0.1"
 libc = "0.2"
 log = "0.4"
 memmap = "0.5.2"
 scoped-tls = "0.1"
 serde = "1.*.*"
 serde_derive = "1.*.*"
 tokio-core = "0.1"
 tokio-io = "0.1"
 tokio-uds = "0.1.7"
-winapi = "0.3.6"
-mio-named-pipes = "=0.1.5"
 
 [dependencies.error-chain]
 version = "0.11.0"
 default-features = false
-
-[build-dependencies]
-cc = "1.0"
--- a/media/audioipc/audioipc/src/async.rs
+++ b/media/audioipc/audioipc/src/async.rs
@@ -1,25 +1,22 @@
 // Copyright © 2017 Mozilla Foundation
 //
 // This program is made available under an ISC-style license.  See the
 // accompanying file LICENSE for details
 
 //! Various async helpers modelled after futures-rs and tokio-io.
 
 use bytes::{Buf, BufMut};
-#[cfg(unix)]
-use futures::Async;
-use futures::Poll;
-#[cfg(unix)]
+use futures::{Async, Poll};
 use iovec::IoVec;
-#[cfg(unix)]
 use msg::{RecvMsg, SendMsg};
 use std::io;
 use tokio_io::{AsyncRead, AsyncWrite};
+use tokio_uds::UnixStream;
 
 pub trait AsyncRecvMsg: AsyncRead {
     /// Pull some bytes from this source into the specified `Buf`, returning
     /// how many bytes were read.
     ///
     /// The `buf` provided will have bytes read into it and the internal cursor
     /// will be advanced if any bytes were read. Note that this method typically
     /// will not reallocate the buffer provided.
@@ -52,23 +49,22 @@ pub trait AsyncSendMsg: AsyncWrite {
     where
         Self: Sized,
         B: Buf,
         C: Buf;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
-#[cfg(unix)]
-impl AsyncRecvMsg for super::AsyncMessageStream {
+impl AsyncRecvMsg for UnixStream {
     fn recv_msg_buf<B>(&mut self, buf: &mut B, cmsg: &mut B) -> Poll<(usize, i32), io::Error>
     where
         B: BufMut,
     {
-        if let Async::NotReady = <super::AsyncMessageStream>::poll_read(self) {
+        if let Async::NotReady = <UnixStream>::poll_read(self) {
             return Ok(Async::NotReady);
         }
         let r = unsafe {
             // The `IoVec` type can't have a 0-length size, so we create a bunch
             // of dummy versions on the stack with 1 length which we'll quickly
             // overwrite.
             let b1: &mut [u8] = &mut [0];
             let b2: &mut [u8] = &mut [0];
@@ -122,24 +118,23 @@ impl AsyncRecvMsg for super::AsyncMessag
                 self.need_read();
                 Ok(Async::NotReady)
             }
             Err(e) => Err(e),
         }
     }
 }
 
-#[cfg(unix)]
-impl AsyncSendMsg for super::AsyncMessageStream {
+impl AsyncSendMsg for UnixStream {
     fn send_msg_buf<B, C>(&mut self, buf: &mut B, cmsg: &C) -> Poll<usize, io::Error>
     where
         B: Buf,
         C: Buf,
     {
-        if let Async::NotReady = <super::AsyncMessageStream>::poll_write(self) {
+        if let Async::NotReady = <UnixStream>::poll_write(self) {
             return Ok(Async::NotReady);
         }
         let r = {
             // The `IoVec` type can't have a zero-length size, so create a dummy
             // version from a 1-length slice which we'll overwrite with the
             // `bytes_vec` method.
             static DUMMY: &[u8] = &[0];
             let nom = <&IoVec>::from(DUMMY);
--- a/media/audioipc/audioipc/src/fd_passing.rs
+++ b/media/audioipc/audioipc/src/fd_passing.rs
@@ -3,17 +3,18 @@
 // This program is made available under an ISC-style license.  See the
 // accompanying file LICENSE for details
 
 use async::{AsyncRecvMsg, AsyncSendMsg};
 use bytes::{Bytes, BytesMut, IntoBuf};
 use cmsg;
 use codec::Codec;
 use futures::{AsyncSink, Poll, Sink, StartSend, Stream};
-use messages::AssocRawPlatformHandle;
+use libc;
+use messages::AssocRawFd;
 use std::collections::VecDeque;
 use std::os::unix::io::RawFd;
 use std::{fmt, io, mem};
 
 const INITIAL_CAPACITY: usize = 1024;
 const BACKPRESSURE_THRESHOLD: usize = 4 * INITIAL_CAPACITY;
 const FDS_CAPACITY: usize = 16;
 
@@ -60,31 +61,31 @@ impl IncomingFds {
 #[derive(Debug)]
 struct Frame {
     msgs: Bytes,
     fds: Option<Bytes>,
 }
 
 /// A unified `Stream` and `Sink` interface over an I/O object, using
 /// the `Codec` trait to encode and decode the payload.
-pub struct FramedWithPlatformHandles<A, C> {
+pub struct FramedWithFds<A, C> {
     io: A,
     codec: C,
     // Stream
     read_buf: BytesMut,
     incoming_fds: IncomingFds,
     is_readable: bool,
     eof: bool,
     // Sink
     frames: VecDeque<Frame>,
     write_buf: BytesMut,
     outgoing_fds: BytesMut,
 }
 
-impl<A, C> FramedWithPlatformHandles<A, C>
+impl<A, C> FramedWithFds<A, C>
 where
     A: AsyncSendMsg,
 {
     // If there is a buffered frame, try to write it to `A`
     fn do_write(&mut self) -> Poll<(), io::Error> {
         trace!("do_write...");
         // Create a frame from any pending message in `write_buf`.
         if !self.write_buf.is_empty() {
@@ -156,74 +157,78 @@ where
 
         let msgs = self.write_buf.take().freeze();
         trace!("set_frame: msgs={:?} fds={:?}", msgs, fds);
 
         self.frames.push_back(Frame { msgs, fds });
     }
 }
 
-impl<A, C> Stream for FramedWithPlatformHandles<A, C>
+impl<A, C> Stream for FramedWithFds<A, C>
 where
     A: AsyncRecvMsg,
     C: Codec,
-    C::Out: AssocRawPlatformHandle,
+    C::Out: AssocRawFd,
 {
     type Item = C::Out;
     type Error = io::Error;
 
     fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
         loop {
             // Repeatedly call `decode` or `decode_eof` as long as it is
             // "readable". Readable is defined as not having returned `None`. If
             // the upstream has returned EOF, and the decoder is no longer
             // readable, it can be assumed that the decoder will never become
             // readable again, at which point the stream is terminated.
             if self.is_readable {
                 if self.eof {
                     let mut item = try!(self.codec.decode_eof(&mut self.read_buf));
-                    item.take_platform_handles(|| self.incoming_fds.take_fds());
+                    item.take_fd(|| self.incoming_fds.take_fds());
                     return Ok(Some(item).into());
                 }
 
                 trace!("attempting to decode a frame");
 
                 if let Some(mut item) = try!(self.codec.decode(&mut self.read_buf)) {
                     trace!("frame decoded from buffer");
-                    item.take_platform_handles(|| self.incoming_fds.take_fds());
+                    item.take_fd(|| self.incoming_fds.take_fds());
                     return Ok(Some(item).into());
                 }
 
                 self.is_readable = false;
             }
 
             assert!(!self.eof);
 
             // Otherwise, try to read more data and try again. Make sure we've
             // got room for at least one byte to read to ensure that we don't
             // get a spurious 0 that looks like EOF
             let (n, _) = try_ready!(
                 self.io
                     .recv_msg_buf(&mut self.read_buf, self.incoming_fds.cmsg())
             );
 
+            // if flags != 0 {
+            //     error!("recv_msg_buf: flags = {:x}", flags)
+            // }
+
             if n == 0 {
                 self.eof = true;
             }
 
             self.is_readable = true;
         }
     }
 }
 
-impl<A, C> Sink for FramedWithPlatformHandles<A, C>
+impl<A, C> Sink for FramedWithFds<A, C>
 where
     A: AsyncSendMsg,
     C: Codec,
-    C::In: AssocRawPlatformHandle + fmt::Debug,
+    C::In: AssocRawFd + fmt::Debug,
 {
     type SinkItem = C::In;
     type SinkError = io::Error;
 
     fn start_send(&mut self, item: Self::SinkItem) -> StartSend<Self::SinkItem, Self::SinkError> {
         trace!("start_send: item={:?}", item);
 
         // If the buffer is already over BACKPRESSURE_THRESHOLD,
@@ -231,21 +236,21 @@ where
         // over BACKPRESSURE_THRESHOLD, then reject the send.
         if self.write_buf.len() > BACKPRESSURE_THRESHOLD {
             try!(self.poll_complete());
             if self.write_buf.len() > BACKPRESSURE_THRESHOLD {
                 return Ok(AsyncSink::NotReady(item));
             }
         }
 
-        let fds = item.platform_handles();
+        let fds = item.fd();
         try!(self.codec.encode(item, &mut self.write_buf));
         let fds = fds.and_then(|fds| {
             cmsg::builder(&mut self.outgoing_fds)
-                .rights(&fds.0[..])
+                .rights(&fds[..])
                 .finish()
                 .ok()
         });
 
         trace!("item fds: {:?}", fds);
 
         if fds.is_some() {
             // Enforce splitting sends on messages that contain file
@@ -268,18 +273,18 @@ where
     }
 
     fn close(&mut self) -> Poll<(), Self::SinkError> {
         try_ready!(self.poll_complete());
         self.io.shutdown()
     }
 }
 
-pub fn framed_with_platformhandles<A, C>(io: A, codec: C) -> FramedWithPlatformHandles<A, C> {
-    FramedWithPlatformHandles {
+pub fn framed_with_fds<A, C>(io: A, codec: C) -> FramedWithFds<A, C> {
+    FramedWithFds {
         io: io,
         codec: codec,
         read_buf: BytesMut::with_capacity(INITIAL_CAPACITY),
         incoming_fds: IncomingFds::new(FDS_CAPACITY),
         is_readable: false,
         eof: false,
         frames: VecDeque::new(),
         write_buf: BytesMut::with_capacity(INITIAL_CAPACITY),
@@ -297,65 +302,53 @@ where
     let mut a = Default::default();
     <A as AsMut<[T]>>::as_mut(&mut a).clone_from_slice(slice);
     a
 }
 
 fn close_fds(fds: &[RawFd]) {
     for fd in fds {
         unsafe {
-            super::close_platformhandle(*fd);
+            libc::close(*fd);
         }
     }
 }
 
 #[cfg(test)]
 mod tests {
     use bytes::BufMut;
-    use libc;
-    use std;
 
-    extern {
-        fn cmsghdr_bytes(size: *mut libc::size_t) -> *const libc::uint8_t;
-    }
-
-    fn cmsg_bytes() -> &'static [u8] {
-        let mut size = 0;
-        unsafe {
-            let ptr = cmsghdr_bytes(&mut size);
-            std::slice::from_raw_parts(ptr, size)
-        }
-    }
+    const CMSG_BYTES: &[u8] =
+        b"\x1c\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\02\0\0\0[\0\0\0\\\0\0\0\xe5\xe5\xe5\xe5";
 
     #[test]
     fn single_cmsg() {
         let mut incoming = super::IncomingFds::new(16);
 
-        incoming.cmsg().put_slice(cmsg_bytes());
+        incoming.cmsg().put_slice(CMSG_BYTES);
         assert!(incoming.take_fds().is_some());
         assert!(incoming.take_fds().is_none());
     }
 
     #[test]
     fn multiple_cmsg_1() {
         let mut incoming = super::IncomingFds::new(16);
 
-        incoming.cmsg().put_slice(cmsg_bytes());
+        incoming.cmsg().put_slice(CMSG_BYTES);
         assert!(incoming.take_fds().is_some());
-        incoming.cmsg().put_slice(cmsg_bytes());
+        incoming.cmsg().put_slice(CMSG_BYTES);
         assert!(incoming.take_fds().is_some());
         assert!(incoming.take_fds().is_none());
     }
 
     #[test]
     fn multiple_cmsg_2() {
         let mut incoming = super::IncomingFds::new(16);
-        println!("cmsg_bytes() {}", cmsg_bytes().len());
 
-        incoming.cmsg().put_slice(cmsg_bytes());
-        incoming.cmsg().put_slice(cmsg_bytes());
+        incoming.cmsg().put_slice(CMSG_BYTES);
+        incoming.cmsg().put_slice(CMSG_BYTES);
         assert!(incoming.take_fds().is_some());
-        incoming.cmsg().put_slice(cmsg_bytes());
+        incoming.cmsg().put_slice(CMSG_BYTES);
         assert!(incoming.take_fds().is_some());
         assert!(incoming.take_fds().is_some());
         assert!(incoming.take_fds().is_none());
     }
 }
deleted file mode 100644
--- a/media/audioipc/audioipc/src/handle_passing.rs
+++ /dev/null
@@ -1,256 +0,0 @@
-// Copyright © 2017 Mozilla Foundation
-//
-// This program is made available under an ISC-style license.  See the
-// accompanying file LICENSE for details
-
-use tokio_io::{AsyncRead, AsyncWrite};
-use bytes::{Bytes, BytesMut, IntoBuf};
-use codec::Codec;
-use futures::{AsyncSink, Poll, Sink, StartSend, Stream};
-use messages::AssocRawPlatformHandle;
-use std::collections::VecDeque;
-use std::{fmt, io};
-
-const INITIAL_CAPACITY: usize = 1024;
-const BACKPRESSURE_THRESHOLD: usize = 4 * INITIAL_CAPACITY;
-
-#[derive(Debug)]
-struct Frame {
-    msgs: Bytes,
-}
-
-/// A unified `Stream` and `Sink` interface over an I/O object, using
-/// the `Codec` trait to encode and decode the payload.
-pub struct FramedWithPlatformHandles<A, C> {
-    io: A,
-    codec: C,
-    // Stream
-    read_buf: BytesMut,
-    is_readable: bool,
-    eof: bool,
-    // Sink
-    frames: VecDeque<Frame>,
-    write_buf: BytesMut,
-}
-
-impl<A, C> FramedWithPlatformHandles<A, C>
-where
-    A: AsyncWrite,
-{
-    // If there is a buffered frame, try to write it to `A`
-    fn do_write(&mut self) -> Poll<(), io::Error> {
-        trace!("do_write...");
-        // Create a frame from any pending message in `write_buf`.
-        if !self.write_buf.is_empty() {
-            self.set_frame();
-        }
-
-        trace!("pending frames: {:?}", self.frames);
-
-        let mut processed = 0;
-
-        loop {
-            let n = match self.frames.front() {
-                Some(frame) => {
-                    trace!("sending msg {:?}", frame.msgs);
-                    let mut msgs = frame.msgs.clone().into_buf();
-                    try_ready!(self.io.write_buf(&mut msgs))
-                }
-                _ => {
-                    // No pending frames.
-                    return Ok(().into());
-                }
-            };
-
-            match self.frames.pop_front() {
-                Some(mut frame) => {
-                    processed += 1;
-
-                    if n != frame.msgs.len() {
-                        // If only part of the message was sent then
-                        // re-queue the remaining message at the head
-                        // of the queue. (Don't need to resend the
-                        // handles since they've been sent with the
-                        // first part.)
-                        drop(frame.msgs.split_to(n));
-                        self.frames.push_front(frame);
-                        break;
-                    }
-                }
-                _ => panic!(),
-            }
-        }
-        trace!("process {} frames", processed);
-        trace!("pending frames: {:?}", self.frames);
-
-        Ok(().into())
-    }
-
-    fn set_frame(&mut self) {
-        if self.write_buf.is_empty() {
-            trace!("set_frame: No pending messages...");
-            return;
-        }
-
-        let msgs = self.write_buf.take().freeze();
-        trace!("set_frame: msgs={:?}", msgs);
-
-        self.frames.push_back(Frame { msgs });
-    }
-}
-
-impl<A, C> Stream for FramedWithPlatformHandles<A, C>
-where
-    A: AsyncRead,
-    C: Codec,
-    C::Out: AssocRawPlatformHandle,
-{
-    type Item = C::Out;
-    type Error = io::Error;
-
-    fn poll(&mut self) -> Poll<Option<Self::Item>, Self::Error> {
-        loop {
-            // Repeatedly call `decode` or `decode_eof` as long as it is
-            // "readable". Readable is defined as not having returned `None`. If
-            // the upstream has returned EOF, and the decoder is no longer
-            // readable, it can be assumed that the decoder will never become
-            // readable again, at which point the stream is terminated.
-            if self.is_readable {
-                if self.eof {
-                    let item = try!(self.codec.decode_eof(&mut self.read_buf));
-                    return Ok(Some(item).into());
-                }
-
-                trace!("attempting to decode a frame");
-
-                if let Some(item) = try!(self.codec.decode(&mut self.read_buf)) {
-                    trace!("frame decoded from buffer");
-                    return Ok(Some(item).into());
-                }
-
-                self.is_readable = false;
-            }
-
-            assert!(!self.eof);
-
-            // Otherwise, try to read more data and try again. Make sure we've
-            // got room for at least one byte to read to ensure that we don't
-            // get a spurious 0 that looks like EOF
-            let n = try_ready!(
-                self.io
-                    .read_buf(&mut self.read_buf)
-            );
-
-            if n == 0 {
-                self.eof = true;
-            }
-
-            self.is_readable = true;
-        }
-    }
-}
-
-impl<A, C> Sink for FramedWithPlatformHandles<A, C>
-where
-    A: AsyncWrite,
-    C: Codec,
-    C::In: AssocRawPlatformHandle + fmt::Debug,
-{
-    type SinkItem = C::In;
-    type SinkError = io::Error;
-
-    fn start_send(&mut self, mut item: Self::SinkItem) -> StartSend<Self::SinkItem, Self::SinkError> {
-        trace!("start_send: item={:?}", item);
-
-        // If the buffer is already over BACKPRESSURE_THRESHOLD,
-        // then attempt to flush it. If after flush it's *still*
-        // over BACKPRESSURE_THRESHOLD, then reject the send.
-        if self.write_buf.len() > BACKPRESSURE_THRESHOLD {
-            try!(self.poll_complete());
-            if self.write_buf.len() > BACKPRESSURE_THRESHOLD {
-                return Ok(AsyncSink::NotReady(item));
-            }
-        }
-
-        let mut got_handles = false;
-        if let Some((handles, target_pid)) = item.platform_handles() {
-            got_handles = true;
-            let remote_handles = unsafe {
-                [duplicate_platformhandle(handles[0], target_pid)?,
-                 duplicate_platformhandle(handles[1], target_pid)?,
-                 duplicate_platformhandle(handles[2], target_pid)?]
-            };
-            trace!("item handles: {:?} remote_handles: {:?}", handles, remote_handles);
-            item.take_platform_handles(|| Some(remote_handles));
-        }
-
-        try!(self.codec.encode(item, &mut self.write_buf));
-
-        if got_handles {
-            // Enforce splitting sends on messages that contain file
-            // descriptors.
-            self.set_frame();
-        }
-
-        Ok(AsyncSink::Ready)
-    }
-
-    fn poll_complete(&mut self) -> Poll<(), Self::SinkError> {
-        trace!("flushing framed transport");
-
-        try_ready!(self.do_write());
-
-        try_nb!(self.io.flush());
-
-        trace!("framed transport flushed");
-        Ok(().into())
-    }
-
-    fn close(&mut self) -> Poll<(), Self::SinkError> {
-        try_ready!(self.poll_complete());
-        self.io.shutdown()
-    }
-}
-
-pub fn framed_with_platformhandles<A, C>(io: A, codec: C) -> FramedWithPlatformHandles<A, C> {
-    FramedWithPlatformHandles {
-        io: io,
-        codec: codec,
-        read_buf: BytesMut::with_capacity(INITIAL_CAPACITY),
-        is_readable: false,
-        eof: false,
-        frames: VecDeque::new(),
-        write_buf: BytesMut::with_capacity(INITIAL_CAPACITY),
-    }
-}
-
-use winapi::um::{processthreadsapi, winnt, handleapi};
-use winapi::shared::minwindef::{DWORD, FALSE};
-use super::PlatformHandleType;
-
-// source_handle is effectively taken ownership of (consumed) and
-// closed when duplicate_platformhandle is called.
-// TODO: Make this transfer more explicit via the type system.
-unsafe fn duplicate_platformhandle(source_handle: PlatformHandleType,
-                                   target_pid: DWORD) -> Result<PlatformHandleType, std::io::Error> {
-    let source = processthreadsapi::GetCurrentProcess();
-    let target = processthreadsapi::OpenProcess(winnt::PROCESS_DUP_HANDLE,
-                                                FALSE,
-                                                target_pid);
-    if !super::valid_handle(target) {
-        return Err(std::io::Error::new(std::io::ErrorKind::Other, "invalid target process"));
-    }
-
-    let mut target_handle = std::ptr::null_mut();
-    let ok = handleapi::DuplicateHandle(source,
-                                        source_handle,
-                                        target,
-                                        &mut target_handle,
-                                        0,
-                                        FALSE,
-                                        winnt::DUPLICATE_CLOSE_SOURCE | winnt::DUPLICATE_SAME_ACCESS);
-    if ok == FALSE {
-        return Err(std::io::Error::new(std::io::ErrorKind::Other, "DuplicateHandle failed"));
-    }
-    Ok(target_handle)
-}
--- a/media/audioipc/audioipc/src/lib.rs
+++ b/media/audioipc/audioipc/src/lib.rs
@@ -23,175 +23,39 @@ extern crate libc;
 extern crate memmap;
 #[macro_use]
 extern crate scoped_tls;
 extern crate serde;
 extern crate tokio_core;
 #[macro_use]
 extern crate tokio_io;
 extern crate tokio_uds;
-#[cfg(windows)]
-extern crate winapi;
 
 mod async;
-#[cfg(unix)]
 mod cmsg;
 pub mod codec;
 pub mod core;
 #[allow(deprecated)]
 pub mod errors;
-#[cfg(unix)]
 pub mod fd_passing;
-#[cfg(unix)]
-pub use fd_passing as platformhandle_passing;
-#[cfg(windows)]
-pub mod handle_passing;
-#[cfg(windows)]
-pub use handle_passing as platformhandle_passing;
 pub mod frame;
 pub mod messages;
-#[cfg(unix)]
 mod msg;
 pub mod rpc;
 pub mod shm;
 
 pub use messages::{ClientMessage, ServerMessage};
 use std::env::temp_dir;
 use std::path::PathBuf;
 
-#[cfg(windows)]
-use std::os::windows::io::{FromRawHandle, IntoRawHandle};
-#[cfg(unix)]
-use std::os::unix::io::{FromRawFd, IntoRawFd};
-
 // This must match the definition of
 // ipc::FileDescriptor::PlatformHandleType in Gecko.
-#[cfg(windows)]
-pub type PlatformHandleType = std::os::windows::raw::HANDLE;
-#[cfg(unix)]
+#[cfg(target_os = "windows")]
+pub type PlatformHandleType = *mut std::os::raw::c_void;
+#[cfg(not(target_os = "windows"))]
 pub type PlatformHandleType = libc::c_int;
 
-// This stands in for RawFd/RawHandle.
-#[derive(Copy, Clone, Debug)]
-pub struct PlatformHandle(PlatformHandleType);
-
-unsafe impl Send for PlatformHandle {}
-
-// Custom serialization to treat HANDLEs as i64.  This is not valid in
-// general, but after sending the HANDLE value to a remote process we
-// use it to create a valid HANDLE via DuplicateHandle.
-// To avoid duplicating the serialization code, we're lazy and treat
-// file descriptors as i64 rather than i32.
-impl serde::Serialize for PlatformHandle {
-    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-    where
-        S: serde::Serializer,
-    {
-        serializer.serialize_i64(self.0 as i64)
-    }
-}
-
-struct PlatformHandleVisitor;
-impl<'de> serde::de::Visitor<'de> for PlatformHandleVisitor {
-    type Value = PlatformHandle;
-
-    fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
-        formatter.write_str("an integer between -2^63 and 2^63")
-    }
-
-    fn visit_i64<E>(self, value: i64) -> Result<Self::Value, E>
-    where
-        E: serde::de::Error,
-    {
-        Ok(PlatformHandle::new(value as PlatformHandleType))
-    }
-}
-
-impl<'de> serde::Deserialize<'de> for PlatformHandle {
-    fn deserialize<D>(deserializer: D) -> Result<PlatformHandle, D::Error>
-    where
-        D: serde::Deserializer<'de>,
-    {
-        deserializer.deserialize_i64(PlatformHandleVisitor)
-    }
-}
-
-#[cfg(unix)]
-fn valid_handle(handle: PlatformHandleType) -> bool {
-    handle >= 0
-}
-
-#[cfg(windows)]
-fn valid_handle(handle: PlatformHandleType) -> bool {
-    const INVALID_HANDLE_VALUE: PlatformHandleType = -1isize as PlatformHandleType;
-    const NULL_HANDLE_VALUE: PlatformHandleType = 0isize as PlatformHandleType;
-    handle != INVALID_HANDLE_VALUE && handle != NULL_HANDLE_VALUE
-}
-
-impl PlatformHandle {
-    pub fn new(raw: PlatformHandleType) -> PlatformHandle {
-        PlatformHandle(raw)
-    }
-
-    pub fn try_new(raw: PlatformHandleType) -> Option<PlatformHandle> {
-        if !valid_handle(raw) {
-            return None;
-        }
-        Some(PlatformHandle::new(raw))
-    }
-
-    #[cfg(windows)]
-    pub fn from<T: IntoRawHandle>(from: T) -> PlatformHandle {
-        PlatformHandle::new(from.into_raw_handle())
-    }
-
-    #[cfg(unix)]
-    pub fn from<T: IntoRawFd>(from: T) -> PlatformHandle {
-        PlatformHandle::new(from.into_raw_fd())
-    }
-
-    #[cfg(windows)]
-    pub unsafe fn into_file(self) -> std::fs::File {
-        std::fs::File::from_raw_handle(self.0)
-    }
-
-    #[cfg(unix)]
-    pub unsafe fn into_file(self) -> std::fs::File {
-        std::fs::File::from_raw_fd(self.0)
-    }
-
-    pub fn as_raw(&self) -> PlatformHandleType {
-        self.0
-    }
-
-    pub unsafe fn close(self) {
-        close_platformhandle(self.0);
-    }
-}
-
-#[cfg(unix)]
-unsafe fn close_platformhandle(handle: PlatformHandleType) {
-    libc::close(handle);
-}
-
-#[cfg(windows)]
-unsafe fn close_platformhandle(handle: PlatformHandleType) {
-    winapi::um::handleapi::CloseHandle(handle);
-}
-
 pub fn get_shm_path(dir: &str) -> PathBuf {
-    let pid = std::process::id();
+    let pid = unsafe { libc::getpid() };
     let mut temp = temp_dir();
     temp.push(&format!("cubeb-shm-{}-{}", pid, dir));
     temp
 }
-
-#[cfg(unix)]
-pub mod messagestream_unix;
-#[cfg(unix)]
-pub use messagestream_unix::*;
-
-#[cfg(windows)]
-pub mod messagestream_win;
-#[cfg(windows)]
-pub use messagestream_win::*;
-#[cfg(windows)]
-mod tokio_named_pipes;
--- a/media/audioipc/audioipc/src/messages.rs
+++ b/media/audioipc/audioipc/src/messages.rs
@@ -1,18 +1,17 @@
 // Copyright © 2017 Mozilla Foundation
 //
 // This program is made available under an ISC-style license.  See the
 // accompanying file LICENSE for details
 
-use PlatformHandle;
-use PlatformHandleType;
 use cubeb::{self, ffi};
 use std::ffi::{CStr, CString};
 use std::os::raw::{c_char, c_int, c_uint};
+use std::os::unix::io::RawFd;
 use std::ptr;
 
 #[derive(Debug, Serialize, Deserialize)]
 pub struct Device {
     pub output_name: Option<Vec<u8>>,
     pub input_name: Option<Vec<u8>>,
 }
 
@@ -165,26 +164,25 @@ fn opt_str(v: Option<Vec<u8>>) -> *mut c
         },
         None => ptr::null_mut(),
     }
 }
 
 #[derive(Debug, Serialize, Deserialize)]
 pub struct StreamCreate {
     pub token: usize,
-    pub platform_handles: [PlatformHandle; 3],
-    pub target_pid: u32,
+    pub fds: [RawFd; 3],
 }
 
 // Client -> Server messages.
 // TODO: Callbacks should be different messages types so
 // ServerConn::process_msg doesn't have a catch-all case.
 #[derive(Debug, Serialize, Deserialize)]
 pub enum ServerMessage {
-    ClientConnect(u32),
+    ClientConnect,
     ClientDisconnect,
 
     ContextGetBackendId,
     ContextGetMaxChannelCount,
     ContextGetMinLatency(StreamParams),
     ContextGetPreferredSampleRate,
     ContextGetDeviceEnumeration(ffi::cubeb_device_type),
 
@@ -238,50 +236,42 @@ pub enum CallbackReq {
 }
 
 #[derive(Debug, Deserialize, Serialize)]
 pub enum CallbackResp {
     Data(isize),
     State,
 }
 
-pub trait AssocRawPlatformHandle {
-    fn platform_handles(&self) -> Option<([PlatformHandleType; 3], u32)> {
+pub trait AssocRawFd {
+    fn fd(&self) -> Option<[RawFd; 3]> {
         None
     }
-
-    fn take_platform_handles<F>(&mut self, f: F)
+    fn take_fd<F>(&mut self, _: F)
     where
-        F: FnOnce() -> Option<[PlatformHandleType; 3]> {
-        assert!(f().is_none());
+        F: FnOnce() -> Option<[RawFd; 3]>,
+    {
     }
 }
 
-impl AssocRawPlatformHandle for ServerMessage {}
-
-impl AssocRawPlatformHandle for ClientMessage {
-    fn platform_handles(&self) -> Option<([PlatformHandleType; 3], u32)> {
+impl AssocRawFd for ServerMessage {}
+impl AssocRawFd for ClientMessage {
+    fn fd(&self) -> Option<[RawFd; 3]> {
         match *self {
-            ClientMessage::StreamCreated(ref data) => Some(([data.platform_handles[0].as_raw(),
-                                                             data.platform_handles[1].as_raw(),
-                                                             data.platform_handles[2].as_raw()],
-                                                            data.target_pid)),
+            ClientMessage::StreamCreated(ref data) => Some(data.fds),
             _ => None,
         }
     }
 
-    fn take_platform_handles<F>(&mut self, f: F)
+    fn take_fd<F>(&mut self, f: F)
     where
-        F: FnOnce() -> Option<[PlatformHandleType; 3]>,
+        F: FnOnce() -> Option<[RawFd; 3]>,
     {
         if let ClientMessage::StreamCreated(ref mut data) = *self {
-            let handles = f().expect("platform_handles must be available when processing StreamCreated");
-            data.platform_handles = [PlatformHandle::new(handles[0]),
-                                     PlatformHandle::new(handles[1]),
-                                     PlatformHandle::new(handles[2])]
+            data.fds = f().unwrap();
         }
     }
 }
 
 #[cfg(test)]
 mod test {
     use super::StreamParams;
     use cubeb::ffi;
deleted file mode 100644
--- a/media/audioipc/audioipc/src/messagestream_unix.rs
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright © 2017 Mozilla Foundation
-//
-// This program is made available under an ISC-style license.  See the
-// accompanying file LICENSE for details
-
-use std::os::unix::io::{IntoRawFd, FromRawFd, AsRawFd, RawFd};
-use std::os::unix::net;
-use tokio_io::{AsyncRead, AsyncWrite};
-
-#[derive(Debug)]
-pub struct MessageStream(net::UnixStream);
-pub struct AsyncMessageStream(tokio_uds::UnixStream);
-
-impl MessageStream {
-    fn new(stream: net::UnixStream) -> MessageStream {
-        MessageStream(stream)
-    }
-
-    pub fn anonymous_ipc_pair() -> std::result::Result<(MessageStream, MessageStream), std::io::Error> {
-        let pair = net::UnixStream::pair()?;
-        Ok((MessageStream::new(pair.0), MessageStream::new(pair.1)))
-    }
-
-    pub unsafe fn from_raw_fd(raw: super::PlatformHandleType) -> MessageStream {
-        MessageStream::new(net::UnixStream::from_raw_fd(raw))
-    }
-
-    pub fn into_tokio_ipc(self, handle: &tokio_core::reactor::Handle) -> std::result::Result<AsyncMessageStream, std::io::Error> {
-        Ok(AsyncMessageStream::new(tokio_uds::UnixStream::from_stream(self.0, handle)?))
-    }
-}
-
-impl AsyncMessageStream {
-    fn new(stream: tokio_uds::UnixStream) -> AsyncMessageStream {
-        AsyncMessageStream(stream)
-    }
-
-    pub fn poll_read(&self) -> futures::Async<()> {
-        self.0.poll_read()
-    }
-
-    pub fn poll_write(&self) -> futures::Async<()> {
-        self.0.poll_write()
-    }
-
-    pub fn need_read(&self) {
-        self.0.need_read()
-    }
-
-    pub fn need_write(&self) {
-        self.0.need_write()
-    }
-}
-
-impl std::io::Read for AsyncMessageStream {
-    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
-        self.0.read(buf)
-    }
-}
-
-impl std::io::Write for AsyncMessageStream {
-    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
-        self.0.write(buf)
-    }
-    fn flush(&mut self) -> std::io::Result<()> {
-        self.0.flush()
-    }
-}
-
-impl AsyncRead for AsyncMessageStream {
-    fn read_buf<B: bytes::BufMut>(&mut self, buf: &mut B) -> futures::Poll<usize, std::io::Error> {
-        <&tokio_uds::UnixStream>::read_buf(&mut &self.0, buf)
-    }
-}
-
-impl AsyncWrite for AsyncMessageStream {
-    fn shutdown(&mut self) -> futures::Poll<(), std::io::Error> {
-        <&tokio_uds::UnixStream>::shutdown(&mut &self.0)
-    }
-
-    fn write_buf<B: bytes::Buf>(&mut self, buf: &mut B) -> futures::Poll<usize, std::io::Error> {
-        <&tokio_uds::UnixStream>::write_buf(&mut &self.0, buf)
-    }
-}
-
-impl AsRawFd for AsyncMessageStream {
-    fn as_raw_fd(&self) -> RawFd {
-        self.0.as_raw_fd()
-    }
-}
-
-impl IntoRawFd for MessageStream {
-    fn into_raw_fd(self) -> RawFd {
-        self.0.into_raw_fd()
-    }
-}
deleted file mode 100644
--- a/media/audioipc/audioipc/src/messagestream_win.rs
+++ /dev/null
@@ -1,109 +0,0 @@
-// Copyright © 2017 Mozilla Foundation
-//
-// This program is made available under an ISC-style license.  See the
-// accompanying file LICENSE for details
-
-extern crate mio_named_pipes;
-use std::os::windows::io::{IntoRawHandle, FromRawHandle, AsRawHandle, RawHandle};
-use std::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT};
-use tokio_io::{AsyncRead, AsyncWrite};
-use tokio_named_pipes;
-
-#[derive(Debug)]
-pub struct MessageStream(mio_named_pipes::NamedPipe);
-pub struct AsyncMessageStream(tokio_named_pipes::NamedPipe);
-
-impl MessageStream {
-    fn new(stream: mio_named_pipes::NamedPipe) -> MessageStream {
-        MessageStream(stream)
-    }
-
-
-    pub fn anonymous_ipc_pair() -> std::result::Result<(MessageStream, MessageStream), std::io::Error> {
-        let pipe1 = mio_named_pipes::NamedPipe::new(get_pipe_name())?;
-        let pipe2 = unsafe { mio_named_pipes::NamedPipe::from_raw_handle(pipe1.as_raw_handle()) };
-        Ok((MessageStream::new(pipe1), MessageStream::new(pipe2)))
-    }
-
-    pub unsafe fn from_raw_fd(raw: super::PlatformHandleType) -> MessageStream {
-        MessageStream::new(mio_named_pipes::NamedPipe::from_raw_handle(raw))
-    }
-
-    pub fn into_tokio_ipc(self, handle: &tokio_core::reactor::Handle) -> std::result::Result<AsyncMessageStream, std::io::Error> {
-        Ok(AsyncMessageStream::new(tokio_named_pipes::NamedPipe::from_pipe(self.0, handle)?))
-    }
-}
-
-impl AsyncMessageStream {
-    fn new(stream: tokio_named_pipes::NamedPipe) -> AsyncMessageStream {
-        AsyncMessageStream(stream)
-    }
-
-    pub fn poll_read(&self) -> futures::Async<()> {
-        self.0.poll_read()
-    }
-
-    pub fn poll_write(&self) -> futures::Async<()> {
-        self.0.poll_write()
-    }
-
-    pub fn need_read(&self) {
-        self.0.need_read()
-    }
-
-    pub fn need_write(&self) {
-        self.0.need_write()
-    }
-}
-
-impl std::io::Read for AsyncMessageStream {
-    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
-        self.0.read(buf)
-    }
-}
-
-impl std::io::Write for AsyncMessageStream {
-    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
-        self.0.write(buf)
-    }
-    fn flush(&mut self) -> std::io::Result<()> {
-        self.0.flush()
-    }
-}
-
-impl AsyncRead for AsyncMessageStream {
-    fn read_buf<B: bytes::BufMut>(&mut self, buf: &mut B) -> futures::Poll<usize, std::io::Error> {
-        <tokio_named_pipes::NamedPipe>::read_buf(&mut self.0, buf)
-    }
-}
-
-impl AsyncWrite for AsyncMessageStream {
-    fn shutdown(&mut self) -> futures::Poll<(), std::io::Error> {
-        <tokio_named_pipes::NamedPipe>::shutdown(&mut self.0)
-    }
-
-    fn write_buf<B: bytes::Buf>(&mut self, buf: &mut B) -> futures::Poll<usize, std::io::Error> {
-        <tokio_named_pipes::NamedPipe>::write_buf(&mut self.0, buf)
-    }
-}
-
-impl AsRawHandle for AsyncMessageStream {
-    fn as_raw_handle(&self) -> RawHandle {
-        self.0.as_raw_handle()
-    }
-}
-
-impl IntoRawHandle for MessageStream {
-    fn into_raw_handle(self) -> RawHandle {
-        // XXX: Ideally this would call into_raw_handle.
-        self.0.as_raw_handle()
-    }
-}
-
-static PIPE_ID: AtomicUsize = ATOMIC_USIZE_INIT;
-
-fn get_pipe_name() -> String {
-    let pid = std::process::id();
-    let pipe_id = PIPE_ID.fetch_add(1, Ordering::SeqCst);
-    format!("\\\\.\\pipe\\cubeb-pipe-{}-{}", pid, pipe_id)
-}
deleted file mode 100644
--- a/media/audioipc/audioipc/src/tokio_named_pipes.rs
+++ /dev/null
@@ -1,175 +0,0 @@
-// From https://github.com/alexcrichton/tokio-named-pipes/commit/3a22f8fc9a441b548aec25bd5df3b1e0ab99fabe
-// License MIT/Apache-2.0
-// Sloppily updated to be compatible with tokio_io
-// To be replaced with tokio_named_pipes crate after tokio 0.1 update.
-#![cfg(windows)]
-
-extern crate bytes;
-extern crate tokio_core;
-extern crate mio_named_pipes;
-extern crate futures;
-
-use std::ffi::OsStr;
-use std::fmt;
-use std::io::{self, Read, Write};
-use std::os::windows::io::*;
-
-use futures::{Async, Poll};
-use bytes::{BufMut, Buf};
-#[allow(deprecated)]
-use tokio_core::io::Io;
-use tokio_io::{AsyncRead, AsyncWrite};
-use tokio_core::reactor::{PollEvented, Handle};
-
-pub struct NamedPipe {
-    io: PollEvented<mio_named_pipes::NamedPipe>,
-}
-
-impl NamedPipe {
-    pub fn new<P: AsRef<OsStr>>(p: P, handle: &Handle) -> io::Result<NamedPipe> {
-        NamedPipe::_new(p.as_ref(), handle)
-    }
-
-    fn _new(p: &OsStr, handle: &Handle) -> io::Result<NamedPipe> {
-        let inner = try!(mio_named_pipes::NamedPipe::new(p));
-        NamedPipe::from_pipe(inner, handle)
-    }
-
-    pub fn from_pipe(pipe: mio_named_pipes::NamedPipe,
-                     handle: &Handle)
-                     -> io::Result<NamedPipe> {
-        Ok(NamedPipe {
-            io: try!(PollEvented::new(pipe, handle)),
-        })
-    }
-
-    pub fn connect(&self) -> io::Result<()> {
-        self.io.get_ref().connect()
-    }
-
-    pub fn disconnect(&self) -> io::Result<()> {
-        self.io.get_ref().disconnect()
-    }
-
-    pub fn need_read(&self) {
-        self.io.need_read()
-    }
-
-    pub fn need_write(&self) {
-        self.io.need_write()
-    }
-
-    pub fn poll_read(&self) -> Async<()> {
-        self.io.poll_read()
-    }
-
-    pub fn poll_write(&self) -> Async<()> {
-        self.io.poll_write()
-    }
-}
-
-impl Read for NamedPipe {
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        self.io.read(buf)
-    }
-}
-
-impl Write for NamedPipe {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        self.io.write(buf)
-    }
-    fn flush(&mut self) -> io::Result<()> {
-        self.io.flush()
-    }
-}
-
-#[allow(deprecated)]
-impl Io for NamedPipe {
-    fn poll_read(&mut self) -> Async<()> {
-        <NamedPipe>::poll_read(self)
-    }
-
-    fn poll_write(&mut self) -> Async<()> {
-        <NamedPipe>::poll_write(self)
-    }
-}
-
-impl AsyncRead for NamedPipe {
-    unsafe fn prepare_uninitialized_buffer(&self, _: &mut [u8]) -> bool {
-        false
-    }
-
-    fn read_buf<B: BufMut>(&mut self, buf: &mut B) -> Poll<usize, io::Error> {
-        if NamedPipe::poll_read(self).is_not_ready() {
-            return Ok(Async::NotReady)
-        }
-
-        let mut stack_buf = [0u8; 1024];
-        let bytes_read = self.io.read(&mut stack_buf);
-        match bytes_read {
-            Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => {
-                self.io.need_read();
-                return Ok(Async::NotReady);
-            },
-            Err(e) => Err(e),
-            Ok(bytes_read) => {
-                buf.put_slice(&stack_buf[0..bytes_read]);
-                Ok(Async::Ready(bytes_read))
-            }
-        }
-    }
-}
-
-impl AsyncWrite for NamedPipe {
-    fn shutdown(&mut self) -> Poll<(), io::Error> {
-        Ok(().into())
-    }
-
-    fn write_buf<B: Buf>(&mut self, buf: &mut B) -> Poll<usize, io::Error> {
-        if NamedPipe::poll_write(self).is_not_ready() {
-            return Ok(Async::NotReady)
-        }
-
-        let bytes_wrt = self.io.write(buf.bytes());
-        match bytes_wrt {
-            Err(ref e) if e.kind() == std::io::ErrorKind::WouldBlock => {
-                self.io.need_write();
-                return Ok(Async::NotReady);
-            },
-            Err(e) => Err(e),
-            Ok(bytes_wrt) => {
-                buf.advance(bytes_wrt);
-                Ok(Async::Ready(bytes_wrt))
-            }
-        }
-    }
-
-}
-
-impl<'a> Read for &'a NamedPipe {
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        (&self.io).read(buf)
-    }
-}
-
-impl<'a> Write for &'a NamedPipe {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        (&self.io).write(buf)
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        (&self.io).flush()
-    }
-}
-
-impl fmt::Debug for NamedPipe {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        self.io.get_ref().fmt(f)
-    }
-}
-
-impl AsRawHandle for NamedPipe {
-    fn as_raw_handle(&self) -> RawHandle {
-        self.io.get_ref().as_raw_handle()
-    }
-}
--- a/media/audioipc/client/Cargo.toml
+++ b/media/audioipc/client/Cargo.toml
@@ -4,16 +4,16 @@ version = "0.4.0"
 authors = [
         "Matthew Gregan <kinetik@flim.org>",
         "Dan Glastonbury <dan.glastonbury@gmail.com>"
         ]
 description = "Cubeb Backend for talking to remote cubeb server."
 
 [dependencies]
 audioipc = { path="../audioipc" }
-cubeb-backend = "0.5.3"
+cubeb-backend = "0.5"
 foreign-types = "0.3"
 futures = { version="0.1.18", default-features=false, features=["use_std"] }
 futures-cpupool = { version="0.1.8", default-features=false }
 libc = "0.2"
 log = "0.4"
 tokio-core = "0.1"
 tokio-uds = "0.1.7"
--- a/media/audioipc/client/src/context.rs
+++ b/media/audioipc/client/src/context.rs
@@ -1,39 +1,43 @@
 // Copyright © 2017 Mozilla Foundation
 //
 // This program is made available under an ISC-style license.  See the
 // accompanying file LICENSE for details
 
 use assert_not_in_callback;
 use audioipc::codec::LengthDelimitedCodec;
-use audioipc::platformhandle_passing::{framed_with_platformhandles, FramedWithPlatformHandles};
+use audioipc::fd_passing::{framed_with_fds, FramedWithFds};
 use audioipc::{core, rpc};
 use audioipc::{messages, ClientMessage, ServerMessage};
 use cubeb_backend::{
     ffi, Context, ContextOps, DeviceCollectionRef, DeviceId, DeviceType, Error, Ops, Result,
     Stream, StreamParams, StreamParamsRef,
 };
 use futures::Future;
 use futures_cpupool::{self, CpuPool};
+use libc;
 use std::ffi::{CStr, CString};
 use std::os::raw::c_void;
+use std::os::unix::io::FromRawFd;
+use std::os::unix::net;
 use std::sync::mpsc;
 use std::thread;
 use std::{fmt, io, mem, ptr};
 use stream;
 use tokio_core::reactor::{Handle, Remote};
+use tokio_uds::UnixStream;
 use {ClientStream, CPUPOOL_INIT_PARAMS, G_SERVER_FD};
 
 struct CubebClient;
 
 impl rpc::Client for CubebClient {
     type Request = ServerMessage;
     type Response = ClientMessage;
-    type Transport = FramedWithPlatformHandles<audioipc::AsyncMessageStream, LengthDelimitedCodec<Self::Request, Self::Response>>;
+    type Transport = FramedWithFds<UnixStream, LengthDelimitedCodec<Self::Request, Self::Response>>;
 }
 
 macro_rules! t(
     ($e:expr) => (
         match $e {
             Ok(e) => e,
             Err(_) => return Err(Error::default())
         }
@@ -64,34 +68,34 @@ impl ClientContext {
 
     #[doc(hidden)]
     pub fn cpu_pool(&self) -> CpuPool {
         self.cpu_pool.clone()
     }
 }
 
 // TODO: encapsulate connect, etc inside audioipc.
-fn open_server_stream() -> Result<audioipc::MessageStream> {
+fn open_server_stream() -> Result<net::UnixStream> {
     unsafe {
         if let Some(fd) = G_SERVER_FD {
-            return Ok(audioipc::MessageStream::from_raw_fd(fd.as_raw()));
+            return Ok(net::UnixStream::from_raw_fd(fd));
         }
 
         Err(Error::default())
     }
 }
 
 impl ContextOps for ClientContext {
     fn init(_context_name: Option<&CStr>) -> Result<Context> {
         fn bind_and_send_client(
-            stream: audioipc::AsyncMessageStream,
+            stream: UnixStream,
             handle: &Handle,
             tx_rpc: &mpsc::Sender<rpc::ClientProxy<ServerMessage, ClientMessage>>,
         ) -> Option<()> {
-            let transport = framed_with_platformhandles(stream, Default::default());
+            let transport = framed_with_fds(stream, Default::default());
             let rpc = rpc::bind_client::<CubebClient>(transport, handle);
             // If send fails then the rx end has closed
             // which is unlikely here.
             let _ = tx_rpc.send(rpc);
             Some(())
         }
 
         assert_not_in_callback();
@@ -112,17 +116,17 @@ impl ContextOps for ClientContext {
 
         let core = t!(core::spawn_thread("AudioIPC Client RPC", move || {
             let handle = core::handle();
 
             register_thread();
 
             open_server_stream()
                 .ok()
-                .and_then(|stream| stream.into_tokio_ipc(&handle).ok())
+                .and_then(|stream| UnixStream::from_stream(stream, &handle).ok())
                 .and_then(|stream| bind_and_send_client(stream, &handle, &tx_rpc))
                 .ok_or_else(|| {
                     io::Error::new(
                         io::ErrorKind::Other,
                         "Failed to open stream and create rpc.",
                     )
                 })
         }));
@@ -131,18 +135,16 @@ impl ContextOps for ClientContext {
 
         let cpupool = futures_cpupool::Builder::new()
             .name_prefix("AudioIPC")
             .after_start(register_thread)
             .pool_size(params.pool_size)
             .stack_size(params.stack_size)
             .create();
 
-        send_recv!(rpc, ClientConnect(std::process::id()) => ClientConnected)?;
-
         let ctx = Box::new(ClientContext {
             _ops: &CLIENT_OPS as *const _,
             rpc: rpc,
             core: core,
             cpu_pool: cpupool,
         });
         Ok(unsafe { Context::from_ptr(Box::into_raw(ctx) as *mut _) })
     }
@@ -273,17 +275,17 @@ impl ContextOps for ClientContext {
 }
 
 impl Drop for ClientContext {
     fn drop(&mut self) {
         debug!("ClientContext dropped...");
         let _ = send_recv!(self.rpc(), ClientDisconnect => ClientDisconnected);
         unsafe {
             if G_SERVER_FD.is_some() {
-                G_SERVER_FD.take().unwrap().close();
+                libc::close(super::G_SERVER_FD.take().unwrap());
             }
         }
     }
 }
 
 impl fmt::Debug for ClientContext {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         f.debug_struct("ClientContext")
--- a/media/audioipc/client/src/lib.rs
+++ b/media/audioipc/client/src/lib.rs
@@ -15,20 +15,21 @@ extern crate log;
 extern crate tokio_core;
 extern crate tokio_uds;
 
 #[macro_use]
 mod send_recv;
 mod context;
 mod stream;
 
-use audioipc::{PlatformHandleType, PlatformHandle};
+use audioipc::PlatformHandleType;
 use context::ClientContext;
 use cubeb_backend::{capi, ffi};
 use std::os::raw::{c_char, c_int};
+use std::os::unix::io::RawFd;
 use stream::ClientStream;
 
 type InitParamsTls = std::cell::RefCell<Option<CpuPoolInitParams>>;
 
 thread_local!(static IN_CALLBACK: std::cell::RefCell<bool> = std::cell::RefCell::new(false));
 thread_local!(static CPUPOOL_INIT_PARAMS: InitParamsTls = std::cell::RefCell::new(None));
 
 // This must match the definition of AudioIpcInitParams in
@@ -77,36 +78,36 @@ fn set_cpupool_init_params<P>(params: P)
 where
     P: Into<Option<CpuPoolInitParams>>,
 {
     CPUPOOL_INIT_PARAMS.with(|p| {
         *p.borrow_mut() = params.into();
     });
 }
 
-static mut G_SERVER_FD: Option<PlatformHandle> = None;
+static mut G_SERVER_FD: Option<RawFd> = None;
 
 #[no_mangle]
 /// Entry point from C code.
 pub unsafe extern "C" fn audioipc_client_init(
     c: *mut *mut ffi::cubeb,
     context_name: *const c_char,
     init_params: *const AudioIpcInitParams,
 ) -> c_int {
     if init_params.is_null() {
         return cubeb_backend::ffi::CUBEB_ERROR;
     }
 
     let init_params = &*init_params;
 
+    // TODO: Windows portability (for fd).
     // TODO: Better way to pass extra parameters to Context impl.
     if G_SERVER_FD.is_some() {
-        return cubeb_backend::ffi::CUBEB_ERROR;
+        panic!("audioipc client's server connection already initialized.");
     }
-    G_SERVER_FD = PlatformHandle::try_new(init_params.server_connection);
-    if G_SERVER_FD.is_none() {
-        return cubeb_backend::ffi::CUBEB_ERROR;
+    if init_params.server_connection >= 0 {
+        G_SERVER_FD = Some(init_params.server_connection);
     }
 
     let cpupool_init_params = CpuPoolInitParams::init_with(&init_params);
     set_cpupool_init_params(cpupool_init_params);
     capi::capi_init::<ClientContext>(c, context_name)
 }
--- a/media/audioipc/client/src/stream.rs
+++ b/media/audioipc/client/src/stream.rs
@@ -7,19 +7,23 @@ use audioipc::codec::LengthDelimitedCode
 use audioipc::frame::{framed, Framed};
 use audioipc::messages::{self, CallbackReq, CallbackResp, ClientMessage, ServerMessage};
 use audioipc::rpc;
 use audioipc::shm::{SharedMemMutSlice, SharedMemSlice};
 use cubeb_backend::{ffi, DeviceRef, Error, Result, Stream, StreamOps};
 use futures::Future;
 use futures_cpupool::{CpuFuture, CpuPool};
 use std::ffi::CString;
+use std::fs::File;
 use std::os::raw::c_void;
+use std::os::unix::io::FromRawFd;
+use std::os::unix::net;
 use std::ptr;
 use std::sync::mpsc;
+use tokio_uds::UnixStream;
 use ClientContext;
 use {assert_not_in_callback, set_in_callback};
 
 // TODO: Remove and let caller allocate based on cubeb backend requirements.
 const SHM_AREA_SIZE: usize = 2 * 1024 * 1024;
 
 pub struct Device(ffi::cubeb_device);
 
@@ -56,17 +60,17 @@ struct CallbackServer {
     user_ptr: usize,
     cpu_pool: CpuPool,
 }
 
 impl rpc::Server for CallbackServer {
     type Request = CallbackReq;
     type Response = CallbackResp;
     type Future = CpuFuture<Self::Response, ()>;
-    type Transport = Framed<audioipc::AsyncMessageStream, LengthDelimitedCodec<Self::Response, Self::Request>>;
+    type Transport = Framed<UnixStream, LengthDelimitedCodec<Self::Response, Self::Request>>;
 
     fn process(&mut self, req: Self::Request) -> Self::Future {
         match req {
             CallbackReq::Data { nframes, input_frame_size, output_frame_size } => {
                 trace!(
                     "stream_thread: Data Callback: nframes={} input_fs={} output_fs={}",
                     nframes,
                     input_frame_size,
@@ -146,31 +150,31 @@ impl<'ctx> ClientStream<'ctx> {
         assert_not_in_callback();
 
         let has_input = init_params.input_stream_params.is_some();
         let has_output = init_params.output_stream_params.is_some();
 
         let rpc = ctx.rpc();
         let data = try!(send_recv!(rpc, StreamInit(init_params) => StreamCreated()));
 
-        debug!("token = {}, handles = {:?}", data.token, data.platform_handles);
+        debug!("token = {}, fds = {:?}", data.token, data.fds);
 
-        let stm = data.platform_handles[0];
-        let stream = unsafe { audioipc::MessageStream::from_raw_fd(stm.as_raw()) };
+        let stm = data.fds[0];
+        let stream = unsafe { net::UnixStream::from_raw_fd(stm) };
 
-        let input = data.platform_handles[1];
-        let input_file = unsafe { input.into_file() };
+        let input = data.fds[1];
+        let input_file = unsafe { File::from_raw_fd(input) };
         let input_shm = if has_input {
             Some(SharedMemSlice::from(&input_file, SHM_AREA_SIZE).unwrap())
         } else {
             None
         };
 
-        let output = data.platform_handles[2];
-        let output_file = unsafe { output.into_file() };
+        let output = data.fds[2];
+        let output_file = unsafe { File::from_raw_fd(output) };
         let output_shm = if has_output {
             Some(SharedMemMutSlice::from(&output_file, SHM_AREA_SIZE).unwrap())
         } else {
             None
         };
 
         let user_data = user_ptr as usize;
 
@@ -182,17 +186,17 @@ impl<'ctx> ClientStream<'ctx> {
             data_cb: data_callback,
             state_cb: state_callback,
             user_ptr: user_data,
             cpu_pool: cpu_pool,
         };
 
         let (wait_tx, wait_rx) = mpsc::channel();
         ctx.remote().spawn(move |handle| {
-            let stream = stream.into_tokio_ipc(handle).unwrap();
+            let stream = UnixStream::from_stream(stream, handle).unwrap();
             let transport = framed(stream, Default::default());
             rpc::bind_server(transport, server, handle);
             wait_tx.send(()).unwrap();
             Ok(())
         });
         wait_rx.recv().unwrap();
 
         let stream = Box::into_raw(Box::new(ClientStream {
new file mode 100644
--- /dev/null
+++ b/media/audioipc/register-collection-not-supported.patch
@@ -0,0 +1,22 @@
+diff --git a/media/audioipc/client/src/context.rs b/media/audioipc/client/src/context.rs
+--- a/media/audioipc/client/src/context.rs
++++ b/media/audioipc/client/src/context.rs
+@@ -265,17 +265,17 @@ impl ContextOps for ClientContext {
+ 
+     fn register_device_collection_changed(
+         &mut self,
+         _dev_type: DeviceType,
+         _collection_changed_callback: ffi::cubeb_device_collection_changed_callback,
+         _user_ptr: *mut c_void,
+     ) -> Result<()> {
+         assert_not_in_callback();
+-        Ok(())
++        Err(Error::not_supported())
+     }
+ }
+ 
+ impl Drop for ClientContext {
+     fn drop(&mut self) {
+         debug!("ClientContext dropped...");
+         let _ = send_recv!(self.rpc(), ClientDisconnect => ClientDisconnected);
+         unsafe {
--- a/media/audioipc/server/Cargo.toml
+++ b/media/audioipc/server/Cargo.toml
@@ -4,17 +4,17 @@ version = "0.2.3"
 authors = [
         "Matthew Gregan <kinetik@flim.org>",
         "Dan Glastonbury <dan.glastonbury@gmail.com>"
         ]
 description = "Remote cubeb server"
 
 [dependencies]
 audioipc = { path = "../audioipc" }
-cubeb-core = "0.5.3"
+cubeb-core = "0.5.1"
 bytes = "0.4"
 lazycell = "^0.4"
 libc = "0.2"
 log = "0.4"
 slab = "0.3.0"
 futures = "0.1.18"
 tokio-core = "0.1"
 tokio-uds = "0.1.7"
--- a/media/audioipc/server/src/lib.rs
+++ b/media/audioipc/server/src/lib.rs
@@ -15,24 +15,27 @@ extern crate cubeb_core as cubeb;
 extern crate futures;
 extern crate lazycell;
 extern crate libc;
 extern crate slab;
 extern crate tokio_core;
 extern crate tokio_uds;
 
 use audioipc::core;
-use audioipc::platformhandle_passing::framed_with_platformhandles;
+use audioipc::fd_passing::framed_with_fds;
 use audioipc::rpc;
-use audioipc::{MessageStream, PlatformHandle, PlatformHandleType};
+use audioipc::PlatformHandleType;
 use futures::sync::oneshot;
 use futures::Future;
 use std::error::Error;
 use std::os::raw::c_void;
+use std::os::unix::io::IntoRawFd;
+use std::os::unix::net;
 use std::ptr;
+use tokio_uds::UnixStream;
 
 mod server;
 
 #[allow(deprecated)]
 pub mod errors {
     error_chain! {
         links {
             AudioIPC(::audioipc::errors::Error, ::audioipc::errors::ErrorKind);
@@ -94,38 +97,38 @@ pub extern "C" fn audioipc_server_start(
 
 #[no_mangle]
 pub extern "C" fn audioipc_server_new_client(p: *mut c_void) -> PlatformHandleType {
     let (wait_tx, wait_rx) = oneshot::channel();
     let wrapper: &ServerWrapper = unsafe { &*(p as *mut _) };
 
     let cb_remote = wrapper.callback_thread.remote();
 
-    // We create a connected pair of anonymous IPC endpoints. One side
-    // is registered with the reactor core, the other side is returned
-    // to the caller.
-    MessageStream::anonymous_ipc_pair()
+    // We create a pair of connected unix domain sockets. One socket is
+    // registered with the reactor core, the other is returned to the
+    // caller.
+    net::UnixStream::pair()
         .and_then(|(sock1, sock2)| {
             // Spawn closure to run on same thread as reactor::Core
             // via remote handle.
             wrapper.core_thread.remote().spawn(|handle| {
                 trace!("Incoming connection");
-                sock2.into_tokio_ipc(handle)
+                UnixStream::from_stream(sock2, handle)
                     .and_then(|sock| {
-                        let transport = framed_with_platformhandles(sock, Default::default());
+                        let transport = framed_with_fds(sock, Default::default());
                         rpc::bind_server(transport, server::CubebServer::new(cb_remote), handle);
                         Ok(())
                     }).map_err(|_| ())
                     // Notify waiting thread that sock2 has been registered.
                     .and_then(|_| wait_tx.send(()))
             });
             // Wait for notification that sock2 has been registered
             // with reactor::Core.
             let _ = wait_rx.wait();
-            Ok(PlatformHandle::from(sock1).as_raw())
-        }).unwrap_or(-1isize as PlatformHandleType)
+            Ok(sock1.into_raw_fd())
+        }).unwrap_or(-1)
 }
 
 #[no_mangle]
 pub extern "C" fn audioipc_server_stop(p: *mut c_void) {
     let wrapper = unsafe { Box::<ServerWrapper>::from_raw(p as *mut _) };
     drop(wrapper);
 }
--- a/media/audioipc/server/src/server.rs
+++ b/media/audioipc/server/src/server.rs
@@ -1,18 +1,17 @@
 // Copyright © 2017 Mozilla Foundation
 //
 // This program is made available under an ISC-style license.  See the
 // accompanying file LICENSE for details
 
 use audioipc;
-use audioipc::{MessageStream, PlatformHandle};
 use audioipc::codec::LengthDelimitedCodec;
 use audioipc::core;
-use audioipc::platformhandle_passing::FramedWithPlatformHandles;
+use audioipc::fd_passing::FramedWithFds;
 use audioipc::frame::{framed, Framed};
 use audioipc::messages::{
     CallbackReq, CallbackResp, ClientMessage, Device, DeviceInfo, ServerMessage, StreamCreate,
     StreamInitParams, StreamParams,
 };
 use audioipc::rpc;
 use audioipc::shm::{SharedMemReader, SharedMemWriter};
 use cubeb;
@@ -21,18 +20,21 @@ use futures::future::{self, FutureResult
 use futures::sync::oneshot;
 use futures::Future;
 use slab;
 use std::cell::RefCell;
 use std::convert::From;
 use std::ffi::{CStr, CString};
 use std::mem::{size_of, ManuallyDrop};
 use std::os::raw::{c_long, c_void};
+use std::os::unix::io::IntoRawFd;
+use std::os::unix::net;
 use std::{panic, slice};
 use tokio_core::reactor::Remote;
+use tokio_uds::UnixStream;
 
 use errors::*;
 
 fn error(error: cubeb::Error) -> ClientMessage {
     ClientMessage::Error(error.raw_code())
 }
 
 type ContextKey = RefCell<Option<cubeb::Result<cubeb::Context>>>;
@@ -58,17 +60,17 @@ const SHM_AREA_SIZE: usize = 2 * 1024 * 
 // The size in which the stream slab is grown.
 const STREAM_CONN_CHUNK_SIZE: usize = 64;
 
 struct CallbackClient;
 
 impl rpc::Client for CallbackClient {
     type Request = CallbackReq;
     type Response = CallbackResp;
-    type Transport = Framed<audioipc::AsyncMessageStream, LengthDelimitedCodec<Self::Request, Self::Response>>;
+    type Transport = Framed<UnixStream, LengthDelimitedCodec<Self::Request, Self::Response>>;
 }
 
 struct ServerStreamCallbacks {
     /// Size of input frame in bytes
     input_frame_size: u16,
     /// Size of output frame in bytes
     output_frame_size: u16,
     /// Shared memory buffer for sending input data to client
@@ -135,50 +137,45 @@ impl Drop for ServerStream {
     }
 }
 
 type StreamSlab = slab::Slab<ServerStream, usize>;
 
 pub struct CubebServer {
     cb_remote: Remote,
     streams: StreamSlab,
-    remote_pid: Option<u32>,
 }
 
 impl rpc::Server for CubebServer {
     type Request = ServerMessage;
     type Response = ClientMessage;
     type Future = FutureResult<Self::Response, ()>;
-    type Transport = FramedWithPlatformHandles<audioipc::AsyncMessageStream, LengthDelimitedCodec<Self::Response, Self::Request>>;
+    type Transport = FramedWithFds<UnixStream, LengthDelimitedCodec<Self::Response, Self::Request>>;
 
     fn process(&mut self, req: Self::Request) -> Self::Future {
         let resp = with_local_context(|context| match *context {
             Err(_) => error(cubeb::Error::error()),
             Ok(ref context) => self.process_msg(context, &req),
         });
         future::ok(resp)
     }
 }
 
 impl CubebServer {
     pub fn new(cb_remote: Remote) -> Self {
         CubebServer {
             cb_remote: cb_remote,
             streams: StreamSlab::with_capacity(STREAM_CONN_CHUNK_SIZE),
-            remote_pid: None,
         }
     }
 
     // Process a request coming from the client.
     fn process_msg(&mut self, context: &cubeb::Context, msg: &ServerMessage) -> ClientMessage {
         let resp: ClientMessage = match *msg {
-            ServerMessage::ClientConnect(pid) => {
-                self.remote_pid = Some(pid);
-                ClientMessage::ClientConnected
-            }
+            ServerMessage::ClientConnect => panic!("already connected"),
 
             ServerMessage::ClientDisconnect => {
                 // TODO:
                 //self.connection.client_disconnect();
                 ClientMessage::ClientDisconnected
             }
 
             ServerMessage::ContextGetBackendId => ClientMessage::ContextBackendId(),
@@ -302,17 +299,17 @@ impl CubebServer {
                     sample_size * channel_count
                 }).unwrap_or(0u16)
         }
 
         // Create the callback handling struct which is attached the cubeb stream.
         let input_frame_size = frame_size_in_bytes(params.input_stream_params.as_ref());
         let output_frame_size = frame_size_in_bytes(params.output_stream_params.as_ref());
 
-        let (stm1, stm2) = MessageStream::anonymous_ipc_pair()?;
+        let (stm1, stm2) = net::UnixStream::pair()?;
         debug!("Created callback pair: {:?}-{:?}", stm1, stm2);
         let (input_shm, input_file) =
             SharedMemWriter::new(&audioipc::get_shm_path("input"), SHM_AREA_SIZE)?;
         let (output_shm, output_file) =
             SharedMemReader::new(&audioipc::get_shm_path("output"), SHM_AREA_SIZE)?;
 
         // This code is currently running on the Client/Server RPC
         // handling thread.  We need to move the registration of the
@@ -321,17 +318,17 @@ impl CubebServer {
 
         let id = core::handle().id();
 
         let (tx, rx) = oneshot::channel();
         self.cb_remote.spawn(move |handle| {
             // Ensure we're running on a loop different to the one
             // invoking spawn_fn.
             assert_ne!(id, handle.id());
-            let stream = stm2.into_tokio_ipc(handle).unwrap();
+            let stream = UnixStream::from_stream(stm2, handle).unwrap();
             let transport = framed(stream, Default::default());
             let rpc = rpc::bind_client::<CallbackClient>(transport, handle);
             drop(tx.send(rpc));
             Ok(())
         });
 
         let rpc: rpc::ClientProxy<CallbackReq, CallbackResp> = match rx.wait() {
             Ok(rpc) => rpc,
@@ -400,22 +397,21 @@ impl CubebServer {
                         None => {
                             // TODO: Turn into error
                             panic!("Failed to insert stream into slab. No entries")
                         }
                     };
 
                     Ok(ClientMessage::StreamCreated(StreamCreate {
                         token: stm_tok,
-                        platform_handles: [
-                            PlatformHandle::from(stm1),
-                            PlatformHandle::from(input_file),
-                            PlatformHandle::from(output_file),
+                        fds: [
+                            stm1.into_raw_fd(),
+                            input_file.into_raw_fd(),
+                            output_file.into_raw_fd(),
                         ],
-                        target_pid: self.remote_pid.unwrap()
                     }))
                 }).map_err(|e| e.into())
         }
     }
 }
 
 // C callable callbacks
 unsafe extern "C" fn data_cb_c(
--- a/media/audioipc/update.sh
+++ b/media/audioipc/update.sh
@@ -6,18 +6,16 @@ cp -p $1/Cargo.toml .
 
 for crate in audioipc client server; do
     test -d $crate/src || mkdir -p $crate/src
     rm -fr $crate/*
     cp -pr $1/$crate/Cargo.toml $crate/
     cp -pr $1/$crate/src/ $crate/src/
 done
 
-rm audioipc/src/cmsghdr.c
-
 if [ -d $1/.git ]; then
   rev=$(cd $1 && git rev-parse --verify HEAD)
   date=$(cd $1 && git show -s --format=%ci HEAD)
   dirty=$(cd $1 && git diff-index --name-only HEAD)
 fi
 
 if [ -n "$rev" ]; then
   version=$rev
@@ -29,8 +27,10 @@ if [ -n "$rev" ]; then
   rm README_MOZILLA.bak
 else
   echo "Remember to update README_MOZILLA with the version details."
 fi
 
 echo "Applying gecko.patch on top of $rev"
 patch -p3 < gecko.patch
 
+echo "Applying register-collection-not-supported.patch on top of $rev"
+patch -p3 < register-collection-not-supported.patch
--- a/third_party/rust/cubeb-backend/.cargo-checksum.json
+++ b/third_party/rust/cubeb-backend/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"40f1adb1704481723f812650411c8b7829794659d99e4cb36a6b9ded59720bfe","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","src/capi.rs":"300e76bd3901de540b21a2cfc8d15dbcd1b2940d5fbb517fc5fe568af2ec2775","src/lib.rs":"94b80747ae1037423a2281f2572fc6d15cd7702417974ae3730adccd71c7a300","src/log.rs":"704faeb31934dad6bc6d02e01caa85118754209bd559d30d03fcfa5cb8c1603c","src/ops.rs":"55cbf9bdccdd854834eba72e8bde3e59a9a4193e65209769a1a6e0d8a320b8f6","src/traits.rs":"1a6e3401bb25088d355041704bd89099d62b51eda94da177e7e860646c52b955","tests/test_capi.rs":"9d949cbdb1c19e229ce4f652999a058c283cf7d5a882a669dbca08b71ac2fb62"},"package":"3d85f392da233639c311338ece5f4cd5df443ffb35fa3232f172cc7f2a7ce3c4"}
\ No newline at end of file
+{"files":{"Cargo.toml":"5009330f8a03fc0cf4b10540514496db0281bb92541f9850217c5de7d12dc8b7","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","src/capi.rs":"300e76bd3901de540b21a2cfc8d15dbcd1b2940d5fbb517fc5fe568af2ec2775","src/lib.rs":"94b80747ae1037423a2281f2572fc6d15cd7702417974ae3730adccd71c7a300","src/log.rs":"704faeb31934dad6bc6d02e01caa85118754209bd559d30d03fcfa5cb8c1603c","src/ops.rs":"55cbf9bdccdd854834eba72e8bde3e59a9a4193e65209769a1a6e0d8a320b8f6","src/traits.rs":"1a6e3401bb25088d355041704bd89099d62b51eda94da177e7e860646c52b955","tests/test_capi.rs":"9d949cbdb1c19e229ce4f652999a058c283cf7d5a882a669dbca08b71ac2fb62"},"package":"0432a0d08c3f9a778a2b0b6214c87ec2eb17e8639eb68baf0686bdafc4fd11f1"}
\ No newline at end of file
--- a/third_party/rust/cubeb-backend/Cargo.toml
+++ b/third_party/rust/cubeb-backend/Cargo.toml
@@ -7,23 +7,23 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "cubeb-backend"
-version = "0.5.3"
+version = "0.5.1"
 authors = ["Dan Glastonbury <dglastonbury@mozilla.com>"]
 description = "Bindings to libcubeb internals to facilitate implementing cubeb backends in rust.\n"
 homepage = "https://github.com/djg/cubeb-rs"
 keywords = ["cubeb"]
 categories = ["api-bindings"]
 license = "ISC"
 repository = "https://github.com/djg/cubeb-rs"
 [dependencies.cubeb-core]
-version = "0.5.3"
+version = "0.5.0"
 
 [features]
 gecko-in-tree = ["cubeb-core/gecko-in-tree"]
 [badges.circle-ci]
 repository = "djg/cubeb-rs"
--- a/third_party/rust/cubeb-core/.cargo-checksum.json
+++ b/third_party/rust/cubeb-core/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"ea2ecec41a53f7a9bc835a02d3f963df299e93c406981110b484d507efef34af","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","src/builders.rs":"ca97e3a3d1f3fc451c17851c8538964ec67f3964dfe29e902d904ee7445becca","src/channel.rs":"c8d5a76ef3ecdd96cd4de516e3d4d139bbb83c4690d1c3f5fd07fffc47be51f1","src/context.rs":"09625b75070ec88d566a907ab2e574e2d85df4c6df295f798b3372df2cdc8f7a","src/device.rs":"490d2e94ecae1e149476c2e8d9aa03c4163987c3efccc962b2d3123e4c09dedf","src/device_collection.rs":"f6d0c1628cc34b524f86b84a1e1c79971c3f64ebc4ac64eeb10a1330bbe8c238","src/error.rs":"855ff3d3597753f832ecea00e403c71129afd80db3d39456cf3e23cb9aeb91e7","src/ffi_types.rs":"d815d7a80895b5e86907e708dc0219fca4ac4668cde114afee434e7d702a145d","src/format.rs":"5513c537a72af1c222ee7c30b26d4de9d368a69772688b95d88b1a99f6892d5c","src/lib.rs":"6010a5e20b836b8e5c9fba382fde819e6f3c18c0ec2016e6e7e118eabedbcd51","src/log.rs":"c46bae3472043fd076df3229c3421d948a87fae8495c1524b41ab2d8608f612a","src/stream.rs":"775b9af0e3d8c1a7a38f96b8365a632a9d52a43541d96ede9a4ed9688c2dc914","src/try_call.rs":"231bfa3f3448f7531427bb228beb2bcd4fd711f0b13d2d8f412af013470f40c7","src/util.rs":"308cfbaacd615ff600e74415c52daeef007fff34a4a0648a73c0042f6067f84f"},"package":"e5e526ad2a1ae7d1443c9dd0c67c32d3c317f8556bfd8cf8827a629ee4cbf974"}
\ No newline at end of file
+{"files":{"Cargo.toml":"c379f4deb07a056d5d1679f4641c3a29dec6c74a82b2304cbf5ec65488e5a9bc","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","src/builders.rs":"ca97e3a3d1f3fc451c17851c8538964ec67f3964dfe29e902d904ee7445becca","src/channel.rs":"c8d5a76ef3ecdd96cd4de516e3d4d139bbb83c4690d1c3f5fd07fffc47be51f1","src/context.rs":"09625b75070ec88d566a907ab2e574e2d85df4c6df295f798b3372df2cdc8f7a","src/device.rs":"490d2e94ecae1e149476c2e8d9aa03c4163987c3efccc962b2d3123e4c09dedf","src/device_collection.rs":"f6d0c1628cc34b524f86b84a1e1c79971c3f64ebc4ac64eeb10a1330bbe8c238","src/error.rs":"855ff3d3597753f832ecea00e403c71129afd80db3d39456cf3e23cb9aeb91e7","src/ffi_types.rs":"d815d7a80895b5e86907e708dc0219fca4ac4668cde114afee434e7d702a145d","src/format.rs":"5513c537a72af1c222ee7c30b26d4de9d368a69772688b95d88b1a99f6892d5c","src/lib.rs":"6010a5e20b836b8e5c9fba382fde819e6f3c18c0ec2016e6e7e118eabedbcd51","src/log.rs":"c46bae3472043fd076df3229c3421d948a87fae8495c1524b41ab2d8608f612a","src/stream.rs":"775b9af0e3d8c1a7a38f96b8365a632a9d52a43541d96ede9a4ed9688c2dc914","src/try_call.rs":"231bfa3f3448f7531427bb228beb2bcd4fd711f0b13d2d8f412af013470f40c7","src/util.rs":"308cfbaacd615ff600e74415c52daeef007fff34a4a0648a73c0042f6067f84f"},"package":"37f7b20f757a4e4b6aa28863236551bff77682dc6db192eba15af615492b5445"}
\ No newline at end of file
--- a/third_party/rust/cubeb-core/Cargo.toml
+++ b/third_party/rust/cubeb-core/Cargo.toml
@@ -7,26 +7,26 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "cubeb-core"
-version = "0.5.3"
+version = "0.5.1"
 authors = ["Dan Glastonbury <dglastonbury@mozilla.com>"]
 description = "Common types and definitions for cubeb rust and C bindings. Not intended for direct use.\n"
 homepage = "https://github.com/djg/cubeb-rs"
 keywords = ["cubeb"]
 categories = ["api-bindings"]
 license = "ISC"
 repository = "https://github.com/djg/cubeb-rs"
 [dependencies.bitflags]
 version = "1.0"
 
 [dependencies.cubeb-sys]
-version = "0.5.3"
+version = "0.5.0"
 
 [features]
 gecko-in-tree = ["cubeb-sys/gecko-in-tree"]
 [badges.circle-ci]
 repository = "djg/cubeb-rs"
--- a/third_party/rust/cubeb-sys/.cargo-checksum.json
+++ b/third_party/rust/cubeb-sys/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"914cfe962d3650681d752791e3b5ff92cfd0d5e4f00273a045699a282e5f5682","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","build.rs":"84f01f6c5f4559b87e348f6bc04d840a405889549dddf5e74cb486ad8b71bef2","libcubeb/AUTHORS":"829e45d138c7c8827799f302806fa4be8cd8bd4bad70a2fe26c3a27a5cf36948","libcubeb/CMakeLists.txt":"381886472be5fc0f925aa42268fd2df9f17f5613ee7db489849af474189f0358","libcubeb/Config.cmake.in":"88019286c96ef3d5d3a673b183c8655dfc97ceede07d3eb6c18f0c51bb896388","libcubeb/INSTALL.md":"7a84cdfbe86e7d3180e2203603b88571df61b369421fa97ee86740ffd4d4db8e","libcubeb/LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","libcubeb/README.md":"aa417156dc65069264901b75fc3c792c73021ec61c909de04e109bd4184c07ab","libcubeb/TODO":"6f8065136e005d2becee810e3d8697a94f2c755f8c79687adfac7136ad165e80","libcubeb/appveyor.yml":"9a87fdc18b76fca1167289ecb2ec3a210b76984c1d7e92268b2cd36f1e00f541","libcubeb/cmake/sanitizers-cmake/CMakeLists.txt":"89b282c19b3897ff666f7847d5e679ae928ca7e76ffd0d23f7c58c9464048b61","libcubeb/cmake/sanitizers-cmake/LICENSE":"4b67e7ae8c91e68e1a929eb1cbaa4c773c6d19aa91aaa12c390cf9560d1c9799","libcubeb/cmake/sanitizers-cmake/README.md":"30ab1524618ac828b75f9b83c665a0bd50b839b42ce61519a8048d73f401da6e","libcubeb/cmake/sanitizers-cmake/cmake/FindASan.cmake":"cba07ffe438c57bef0840ed6a2d2890676530b66509da3c616438c53018baa4f","libcubeb/cmake/sanitizers-cmake/cmake/FindMSan.cmake":"1303aac5028fe9f64d42be0afd47f1291e679d74f8280b3dc5271f20ebf4d7a4","libcubeb/cmake/sanitizers-cmake/cmake/FindSanitizers.cmake":"ce1971b943bbef08fb9aba958cf28e3cbdff075406c85a3cfed22e00c9f8d9a8","libcubeb/cmake/sanitizers-cmake/cmake/FindTSan.cmake":"edca39b287312e9a8fc718f6ec791d2520515900b37426091310fe1bd52dc6a1","libcubeb/cmake/sanitizers-cmake/cmake/FindUBSan.cmake":"5b9d3621f629c807a1345a7cb053677a8bf25782a079e345dda53d04aecdc4b7","libcubeb/cmake/sanitizers-cmake/cmake/asan-wrapper":"4e543936e6374e24b80a0f92135c07c2e2101c0d110e51bddaf0e70ae8ec391e","libcubeb/cmake/sanitizers-cmake/cmake/sanitize-helpers.cmake":"282620734c2a8062f1280d0dde3121b8b01af26e5ecaa7d4308e145f80ecd115","libcubeb/cmake/sanitizers-cmake/tests/CMakeLists.txt":"fb983bab7040be002847db59c2493abfd249f67ad06e3a9270fbceb9fabda11c","libcubeb/cmake/sanitizers-cmake/tests/asan_test.cpp":"8b351c7c8668b4a2438286df426f0ad322cade6d1c6199a74668ccbd1c5204a4","libcubeb/cmake/toolchain-cross-android.cmake":"59d2355845a71647b353fb8b18fca630db8ffee7bb8500143e2d6fbc409cec97","libcubeb/cmake/toolchain-cross-mingw.cmake":"b09dc261981c0d4a0f8430f05aae9c8fc545651cd9cbfacd09754277b776b532","libcubeb/cubeb.supp":"19f33e59f8dc91a327c923e44c2c3f9af0a043ce1d6a8cac275ba094b4bfe0da","libcubeb/docs/Doxyfile.in":"0815f19789cedd310652a133bab260c27b57e95f7a65458df2dfca38ea4f1041","libcubeb/googletest/CHANGES":"72c8a289bfe4dd9160074a3a2238c8067a5bc7ca49fd87f70a134c3f373932a4","libcubeb/googletest/CMakeLists.txt":"cdf938ce79ea066866dc614de3925bfaa48d9e19e04049db2ec8c5443abaaa9b","libcubeb/googletest/CONTRIBUTORS":"4d911cd5e6d71f3f4bbcb2788b2f916df4b0ce1e088752a159457a1d936ae0ce","libcubeb/googletest/COPYING":"9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138","libcubeb/googletest/Makefile.am":"a795e5a18e82ba06fd97509d92d773b7fafd0dd7086db8a1211fbd151b503bac","libcubeb/googletest/README":"484b19654362942fac9734c8fab0ed3d99249b81c69027bdb7de46054abada6b","libcubeb/googletest/cmake/internal_utils.cmake":"6f4670a5825cf8ae0415be9dd43d82a7f30316d75cab20a4c60afb6d9db2a01d","libcubeb/googletest/codegear/gtest.cbproj":"9fa07a66b8c01773256e508187775407c465ed9055651e93d390426d1888721a","libcubeb/googletest/codegear/gtest.groupproj":"76c001cb2ee0070e26d1570fb6db5250f2585179c707496c5ef6d12e582cf205","libcubeb/googletest/codegear/gtest_all.cc":"c8750dc2b7b3612edb60e8d23fc2f60ae264451916c4b15f81cbf60ea30eb75d","libcubeb/googletest/codegear/gtest_link.cc":"e5e47c086f932471e0ca748a62b3b1597e5e731f4d34fb8cb8b2ca2db7ba3ed0","libcubeb/googletest/codegear/gtest_main.cbproj":"056448ba7f41fae3f704b1001922d9f6e419cf8cbcf3a55bf0ecc59ece1fa9a1","libcubeb/googletest/codegear/gtest_unittest.cbproj":"2c48be90b0dbc3224a8bd6c4dc21f78dd1b08c81685e6bd4952bb6df6ee38701","libcubeb/googletest/configure.ac":"fadebffdaeaccebb60fbe4a501c1138c296e01348a5da45fabf5e4233248baa8","libcubeb/googletest/include/gtest/gtest-death-test.h":"fdd087f700cd04a3ce4bdd36f35769de52a44bfc0c5bae2dc9681d4cbcd3c44a","libcubeb/googletest/include/gtest/gtest-message.h":"eaf44df1284d94333507c47091c84eaaf43814e6a02a1b1c0061ca7b363e74d6","libcubeb/googletest/include/gtest/gtest-param-test.h":"f226f0a24c04cddbceaaa45d8a5e575ce18c3392349f9b8ba73317e37e62368d","libcubeb/googletest/include/gtest/gtest-param-test.h.pump":"17c65fd5cc5218279044a61f3873c9c952b0924a7ba5147d4999d400b122207f","libcubeb/googletest/include/gtest/gtest-printers.h":"7046f611398d63ee0f1c37bdb4fd08d9931979b2fedf13b781e6d85d4b3b5d60","libcubeb/googletest/include/gtest/gtest-spi.h":"560407dd45e8e57fa6927504c9e4a4cfdecf30f8cada975c1ffddce765e6a88a","libcubeb/googletest/include/gtest/gtest-test-part.h":"c4d6d840284728740c284646075e8ffc85b63b9f74f3ed488b18ef3c2c2b9005","libcubeb/googletest/include/gtest/gtest-typed-test.h":"1ec858bbb9ed8a8bb553232df016437c080b2670f00453b4de297c286eb78c21","libcubeb/googletest/include/gtest/gtest.h":"47433ca72a43bda7a380c34fe6d4ff451797c687e9bbd74d1f366bcdfa0cb013","libcubeb/googletest/include/gtest/gtest_pred_impl.h":"f03a3f77e3c231889c0ace6f63b2c4e410e4a9330287ea09443b23b9a3cf9092","libcubeb/googletest/include/gtest/gtest_prod.h":"4a99a3d986a45b4d6d9b3af54809f015c54aa98274793a4ae173f5010d0ad33c","libcubeb/googletest/include/gtest/internal/gtest-death-test-internal.h":"0b3abead866363f3e6b4201acc8d2763072e033826b22ae5ebffd790e1415235","libcubeb/googletest/include/gtest/internal/gtest-filepath.h":"638d2bb6c06a894513b03311a8e931ac835fc00afc4bd21fab3afc05732c23a0","libcubeb/googletest/include/gtest/internal/gtest-internal.h":"12c2c83df0a9dc5b46697ccd8271dfa34ee5f3d1972dcb56585bc1459d9583c9","libcubeb/googletest/include/gtest/internal/gtest-linked_ptr.h":"9bd319548dd073630dfd349c06a440c6a582feec47d4ff14f348ec32f8b4c1f3","libcubeb/googletest/include/gtest/internal/gtest-param-util-generated.h":"10db93fa7e98820192bae6f560664469dd33b265036fca64253c89b6801f96cb","libcubeb/googletest/include/gtest/internal/gtest-param-util-generated.h.pump":"abb72365d94d2811b34c195dc520fbf41c7dcb42aae5a1cfa0502cf619b21e70","libcubeb/googletest/include/gtest/internal/gtest-param-util.h":"7f9311f033ef6916217d87cef53b1db6c4e8733be930e4b48fe7e11d21b33da0","libcubeb/googletest/include/gtest/internal/gtest-port.h":"612932c2930a7cf2c3514d89a8d6b51a2c0030d251309b71765ed1c9954e20c5","libcubeb/googletest/include/gtest/internal/gtest-string.h":"a46aa36165c400d1e926f942be03fe04cd7ccb1e59f7a2a03b919c4eea05b997","libcubeb/googletest/include/gtest/internal/gtest-tuple.h":"43e7e3c92f8e4258cf3927a9204b214d4d03e6c796f88f3ad4e66b1ac20aa938","libcubeb/googletest/include/gtest/internal/gtest-tuple.h.pump":"16fa027ed3c5940699e0ac906815e66620993bcf75b0acaf826d4f09348d4b83","libcubeb/googletest/include/gtest/internal/gtest-type-util.h":"6d177af46a9b1e14b969972a8b886667f95e69037aba411433a44fb9b92e7037","libcubeb/googletest/include/gtest/internal/gtest-type-util.h.pump":"22092f44127af91651f57ce222e20914d5d32ae02f1c0964f6d5d7bc019af339","libcubeb/googletest/m4/acx_pthread.m4":"3326e3746b6b351d1671fe31f798269cda8de92c365b8a8305404ec0fa6c6b32","libcubeb/googletest/m4/gtest.m4":"d3c37ebd1aa792c967d4357755cc670bc6deb30091d9e6db498871d90a30ea4c","libcubeb/googletest/make/Makefile":"9b86e2a112dd55c6bf6a2b39e6f4078faf60cfecb8282ebf9b025167ed233420","libcubeb/googletest/msvc/gtest-md.sln":"0beab679b42cf0c431eaf4fe143bbf3b01fc064e20c74d9e33e7e437a70487d4","libcubeb/googletest/msvc/gtest-md.vcproj":"52e873e964daf9d5409b4e9bb471ddf2827be04985cd96c40620f9275d17a256","libcubeb/googletest/msvc/gtest.sln":"be21c2340650ec2259a2fbaeb8608ae6d3e982a0626a0f91128a771dc88e6bea","libcubeb/googletest/msvc/gtest.vcproj":"0064616c7d88a284c1b7c05baab038f239134ea9c6c563628f286f9600b3f921","libcubeb/googletest/msvc/gtest_main-md.vcproj":"f83a294a92b616bf34ccae6743ff916297bdba61d6125a9637a813d467a30372","libcubeb/googletest/msvc/gtest_main.vcproj":"9f03270a00896eab0c7015c6fb1a73818d024e462d3944ba1d3ceb313a051649","libcubeb/googletest/msvc/gtest_prod_test-md.vcproj":"7caa108733e2d5f140da004d2133e04a9a105811909c0e2d4ec06e2971983592","libcubeb/googletest/msvc/gtest_prod_test.vcproj":"cf5bfb7f3de9a59a0eba5535067845d12c33c3fd8fecc3d03aa702665db29578","libcubeb/googletest/msvc/gtest_unittest-md.vcproj":"e7949b21cf0418f2a7afe8aa94616e2c40e3ba0801c2f0826f3a3a3d2e6f48b0","libcubeb/googletest/msvc/gtest_unittest.vcproj":"5b097d596fbbc1c4090fd518008a0961b29661194e1c02d8a2d3daaa557e626f","libcubeb/googletest/samples/prime_tables.h":"2903df1d1e6643a5f624fe3ea3f931c3410eb1858ac347c5df278273c6c91ca4","libcubeb/googletest/samples/sample1.cc":"dc106c5940d87bb4bbef3d77815eab642ee173a3340b2b9c532b5c711c4c2d0e","libcubeb/googletest/samples/sample1.h":"7a7bf9a0fbd2401e8b2cb554bfcb9bd0ed228212f3b970675c1b1d38d4e188bb","libcubeb/googletest/samples/sample10_unittest.cc":"ccebb6393a5a8468399f7e511219b667a2233f82312ce59834a4bb0997d8700e","libcubeb/googletest/samples/sample1_unittest.cc":"904be0d4a095e74393515195392bd10e1e916bb2ca61f3f94b1bd6aebea29cb6","libcubeb/googletest/samples/sample2.cc":"f14b8a1e69d52eef1a70053fb256818c7eca64e8eda08de43cf46e896e57fcc2","libcubeb/googletest/samples/sample2.h":"df956ba520dafca068dbc1e28f36567db3cba36293e06762318af8cda6a12bd4","libcubeb/googletest/samples/sample2_unittest.cc":"abe7e0b253d328cb82ae67623fbe3c89eb94699102510c64a0b568eaca101e05","libcubeb/googletest/samples/sample3-inl.h":"3fe482bbd4f725f5820f5d6beab4d0d4a524be8addf4b344a9a470ec5aabc451","libcubeb/googletest/samples/sample3_unittest.cc":"252c06b4531dc35213ebdd7311700b9b4057bc1bdeeba0cd767b2bc86c456639","libcubeb/googletest/samples/sample4.cc":"b4260f5fa35d78ac114a9abb59fce12403faf0273df41f57e83c341ae7979222","libcubeb/googletest/samples/sample4.h":"604905cae7e5587805c3b884a36eda7a2bebdfedb53b24b0fd9a220eec0ef1a9","libcubeb/googletest/samples/sample4_unittest.cc":"6cfb4821d8cb1c77fbb5af4f8aec569948762d8ea314827e3ead967b5b6a223e","libcubeb/googletest/samples/sample5_unittest.cc":"73646d9038873a68bb2e56b12495d7f7b65b5c23901109701da446af454ba2ec","libcubeb/googletest/samples/sample6_unittest.cc":"833fee399954f908cf0f3b789832e505329787f4cf73607a7b31ca0f62f368d7","libcubeb/googletest/samples/sample7_unittest.cc":"8013ee68d61c181e4e936cdae3a9a635646274f8512033ef11bff7214e03e4a6","libcubeb/googletest/samples/sample8_unittest.cc":"7b7510fadf4955d2f934d23d652dbd35add832e50bdfcc98421fb9be4588d808","libcubeb/googletest/samples/sample9_unittest.cc":"8b827040dea37b460cbcaea0b255b98974a9840f6ef7bd82aaa7d4ad2c724335","libcubeb/googletest/scripts/fuse_gtest_files.py":"adecf64c6bab65b31740c321e568cf174f753d5617745aa5762d842339d68b53","libcubeb/googletest/scripts/gen_gtest_pred_impl.py":"78fb7e20a014c251d723186eb58040e4eb32405b73c9288d787ea0a0e4ff5183","libcubeb/googletest/scripts/gtest-config.in":"9a43978eeee88e188845d737c17f4d024d4e74feae09da7997e8fbe4ea6cc176","libcubeb/googletest/scripts/pump.py":"3856a3d7be37f78e0f214ee7d4f29d05f1ca14218b67539d67c9a16e992f670c","libcubeb/googletest/scripts/test/Makefile":"3576b257594a2d8e843b9e4de8c83353d837833bb86431fb1b4198022b1bcddc","libcubeb/googletest/scripts/upload.py":"f75d0712e3b13bebd8daa0a15e4eb32c9e3034a933f4fcccf65b1e999a7ae066","libcubeb/googletest/scripts/upload_gtest.py":"6e76fc0a7a3831c01cfffd18c220d44438073a66338d91ca61fc84b924021e61","libcubeb/googletest/src/gtest-all.cc":"568ac119f5e6418f1fbcfbdf185d724657d7f3539b47822da229ac5d015626b2","libcubeb/googletest/src/gtest-death-test.cc":"eec1b3c8252670c76acbbaf63483946897ce625139b53a566406b6313f023896","libcubeb/googletest/src/gtest-filepath.cc":"31b7fcda5d11346f8a487597c6a70ff057f1192e0cb11f27eb7841a9f3aa8b86","libcubeb/googletest/src/gtest-internal-inl.h":"c9d428a6b5990ace091e40c4ce8b7bf6c50c186a8314b1c4a4cdc988ca0ac1a4","libcubeb/googletest/src/gtest-port.cc":"95bcf473622d1b901c734e5c2aeb8efb058555ec924212a61bb04f049bb5a069","libcubeb/googletest/src/gtest-printers.cc":"6f191a7fc7f5a0a967fd11964057f2e2d2eaf2f37ccece16bd816531f52b3154","libcubeb/googletest/src/gtest-test-part.cc":"e489868b4cdc66f4fc33bc2326ac86bc1acc5808ab58bbb288c9dcfc330faddc","libcubeb/googletest/src/gtest-typed-test.cc":"ca9e819df728c25a6a1fc072806c22f3494e1dffe4bd0d48284f38dbdd3a0dd5","libcubeb/googletest/src/gtest.cc":"5cf9a3e897892c9f0e5c887f91d3c8c8c5665bd7348560441fc0b946c254873c","libcubeb/googletest/src/gtest_main.cc":"22fa1f77542b882d1798d7f696045c5895942a626e26200a175fa4382e1fa5b5","libcubeb/googletest/test/gtest-death-test_ex_test.cc":"613ccf50a3ff8f84c975a13e86ea01ea4e36933072388a3738b4acf9ed3ed7cf","libcubeb/googletest/test/gtest-death-test_test.cc":"df8384a847bdf889233c3d45d171f784991def7a9b6a08442138569fbae32b9d","libcubeb/googletest/test/gtest-filepath_test.cc":"49760f91723845b113bb60bb9b1a1426ed1da1f4ebfef2462128980ea5692cc9","libcubeb/googletest/test/gtest-linked_ptr_test.cc":"1b9cb4ff67475900db9de34ae9749b94193048a1f7a741091ba5a2dd7fc7a79b","libcubeb/googletest/test/gtest-listener_test.cc":"acf78f2c9a730525ea5adc93e9196a42de8fbfe488db1dfd02656bdbd477b2c0","libcubeb/googletest/test/gtest-message_test.cc":"b1fc68f8b75ce25fbd79b3f7d3c9c793381ef07b3203e1a2d9b610cb597542be","libcubeb/googletest/test/gtest-options_test.cc":"74e3ae0c310edb3139b0032266219d3ce7f386ded6feafa57fef03f4493ed7fa","libcubeb/googletest/test/gtest-param-test2_test.cc":"a0f1efbcab3f7e49df639383157626931f64756f7e738be081760f93f7308332","libcubeb/googletest/test/gtest-param-test_test.cc":"ef8bd344e959053f562b0c9e0d15e2fb6c1e534772a67aaf3f90bd6bad0bf99f","libcubeb/googletest/test/gtest-param-test_test.h":"9d7f47b79d54df7cc050aa6038b0464aa684dfca669a847bf70ea16e4a000628","libcubeb/googletest/test/gtest-port_test.cc":"1600f78ef0860a0f5b5525e5e5041ff32a216cc6ae948b1ea61fe04ec603f67d","libcubeb/googletest/test/gtest-printers_test.cc":"7898e4b4163ee0821fed248e1c75d9f4a0a511a2b4bbfad1ef2f4a11a099f6e7","libcubeb/googletest/test/gtest-test-part_test.cc":"62c8906bb0d12ea84d60217b3773cd8e1768db4aab934880db2316df7026cab8","libcubeb/googletest/test/gtest-tuple_test.cc":"2850dc1f73a3f8020d8a4d80688a28d9b736eae6d677222c3f871d8d33b25501","libcubeb/googletest/test/gtest-typed-test2_test.cc":"c52b65e7181610d6e577631cd50177399884913ff28d08aedfedc92f05185044","libcubeb/googletest/test/gtest-typed-test_test.cc":"c7daff5211028da79b3ca0473dca18ada9197f38e710f72d0493ad3332ce3ec9","libcubeb/googletest/test/gtest-typed-test_test.h":"3145698534d8869beb624c9c8ed114f75bead046b2eeb92ada5a724993ee7786","libcubeb/googletest/test/gtest-unittest-api_test.cc":"e3f54c28ef2849e8b12af666ed46aace50c3e047845072ee6f974ce4528bd297","libcubeb/googletest/test/gtest_all_test.cc":"db0c3c42b385570b1d517e3ee927671b8fad4e206247fca738ec477222ac3d97","libcubeb/googletest/test/gtest_break_on_failure_unittest.py":"11c91bc1c68cfdb913e2affb01261b55fb3b0c18773a45875e9c25cb330a4dcd","libcubeb/googletest/test/gtest_break_on_failure_unittest_.cc":"1da12e4bdda2a0bc7b59d4638fe34b2d3798134224fd9237eeebdd09c3326011","libcubeb/googletest/test/gtest_catch_exceptions_test.py":"305cef45c6dc034bdf72fd91aba1e89e1c6b5d222c3d6baffff5acdfd9b3873e","libcubeb/googletest/test/gtest_catch_exceptions_test_.cc":"b297a4f4d5bc0285ea9eb8869741631658305e49d4513bca904842aacb82128b","libcubeb/googletest/test/gtest_color_test.py":"c4cb006682a40f2d88759a4bcabf0d4be623720b135c71447f1788d17ea23d0f","libcubeb/googletest/test/gtest_color_test_.cc":"f263ba349afe58a558bf0fee98a98bb9207a648e7cd4f908a87799bd13d001ea","libcubeb/googletest/test/gtest_env_var_test.py":"79819598cd1e366eaa8f2a4fee2d638b6ef0686e490402fae792ccce58d876c0","libcubeb/googletest/test/gtest_env_var_test_.cc":"0eee5dfbb2a2598f4e76626346b921928ec1e052e38f254cc97c60d05611ab46","libcubeb/googletest/test/gtest_environment_test.cc":"a52a21ea29c2203b03fa93922733546d171f98d3b2fcd42972269e98fd124715","libcubeb/googletest/test/gtest_filter_unittest.py":"edc7d278803bba41626eacd050d91d7247f1c5999f9dceb99a8877e238bc73d6","libcubeb/googletest/test/gtest_filter_unittest_.cc":"996ac528ad75c293d8201ce28cf6acccee266286bd369b4cf43f05b8d67a4559","libcubeb/googletest/test/gtest_help_test.py":"b43ab690c08e4bffd84a47b361167496298697f9511bdf4a745bf305b5cfbdfc","libcubeb/googletest/test/gtest_help_test_.cc":"ff4b121098f0fe7cb4abf11fdd31f2fe7a477286ec9175482138bc038d61c807","libcubeb/googletest/test/gtest_list_tests_unittest.py":"7caebc175b44b3c727fc50420ada1a6a9500f3e4ce9e2839f69205437aa85e7a","libcubeb/googletest/test/gtest_list_tests_unittest_.cc":"d82d8b72914897232c2ff9fd091a7b0add68b7cf75f3f210d3a487ebeea84cfe","libcubeb/googletest/test/gtest_main_unittest.cc":"0f66f318809c88f0fbe034a340a75331720c4e33be5378022baffaf588ef1202","libcubeb/googletest/test/gtest_no_test_unittest.cc":"7cf487e07c3d27376c2cb8af33d02239b7966623875d37b7aa0259e927a9c2f6","libcubeb/googletest/test/gtest_output_test.py":"cf0dc1979572d94450a5e611b44f3fdb88d9cd980d669a723f0ed63057b5e2c4","libcubeb/googletest/test/gtest_output_test_.cc":"f69569374c2b3d06aa04a38ebc4f92ddc303e6af503f8b533cd8e6bf9f104899","libcubeb/googletest/test/gtest_output_test_golden_lin.txt":"4f3e49c10a524a99437cdcb5294e3335a7f3c07ea8462e65730f703a5fe4fec3","libcubeb/googletest/test/gtest_pred_impl_unittest.cc":"e406eccf75b6b58746a95d1c7ea7bc8e80ff974e438ef7c83074a46d4e62db9a","libcubeb/googletest/test/gtest_prod_test.cc":"b42ca1a6d0a1e43bc576b4ff7776c6d2c37234f6dc2a76f2735f261b4a47a526","libcubeb/googletest/test/gtest_repeat_test.cc":"e10abbb71595920aa3bb415029eed74106335fc9ea3d58c417ccfc7cba6a4cdb","libcubeb/googletest/test/gtest_shuffle_test.py":"12dd94eb5f30260ba37059fa74658bda57dffa821f3ba6a2a8b52ff14b1ad029","libcubeb/googletest/test/gtest_shuffle_test_.cc":"af1b2b01ae275f1a9fee7e7940c0f88f39ded063008994d585aad87e3ffadb39","libcubeb/googletest/test/gtest_sole_header_test.cc":"538414c27a593ab8dc34c37b5c877eb3a022d75d1b481ef14ceca00914929754","libcubeb/googletest/test/gtest_stress_test.cc":"0b02fc12f87944226915a999bdcc8a3eaafb34a1ea5bb0df128774abf8667f09","libcubeb/googletest/test/gtest_test_utils.py":"d4a76930aee6658ad8734981ca0c4ea14f34dbe8fdd31d5afe41f6d98f9779ee","libcubeb/googletest/test/gtest_throw_on_failure_ex_test.cc":"11ae790028da20bc7b7af1572eff3cfe8499be43ab64c110e18e1892612a183f","libcubeb/googletest/test/gtest_throw_on_failure_test.py":"ebe18ca0b07f90c53b9b3f9a54ed02df94facf8995cfa90dd41c6f5474537c13","libcubeb/googletest/test/gtest_throw_on_failure_test_.cc":"f8cbf75d8bf9e9ae068a17ff968434c3aec7b7f1137c994d8f14af1a84361aa9","libcubeb/googletest/test/gtest_uninitialized_test.py":"da8e6ce34930753e36fc1dfa2c3e20e48d02bda2a27d3d03a07364312c5f3bd9","libcubeb/googletest/test/gtest_uninitialized_test_.cc":"0b6a9d4983480f87352ca4da946089264b401f7a4a3b1282253fd6cc861bf483","libcubeb/googletest/test/gtest_unittest.cc":"c0c7d1f691ce1e10c3d1647ed5f7a66510725808ad58bb6da4bc03a7a08fb2fc","libcubeb/googletest/test/gtest_xml_outfile1_test_.cc":"29341d777a9c9d25f360d13ed966b30f0cbef1fc88aefe2f01bb88b82cf1ed93","libcubeb/googletest/test/gtest_xml_outfile2_test_.cc":"da7ab3cf0e9b2a293eceed7c5691233d6b61afb557e3c1176dfb75390f85be46","libcubeb/googletest/test/gtest_xml_outfiles_test.py":"b07927b43f44afbfd61761c2cc69f1b68c4fbdeddb992db03ff0c73052518cd4","libcubeb/googletest/test/gtest_xml_output_unittest.py":"b5ff0c0207238d01cada961b8f4656f2ec30a3e1e5bf9d22efdf1745af423031","libcubeb/googletest/test/gtest_xml_output_unittest_.cc":"ad0b9ebe63a146e386df3c5c51916869f6d4647b9832ceacc912fb1272d15f82","libcubeb/googletest/test/gtest_xml_test_utils.py":"ad89a39a6cd5b08e87082341f3e7800dbf1150ea0f1386e0b8cd374aa6832f00","libcubeb/googletest/test/production.cc":"56fef77c3a8e62073ec11653d740a8e534008a0d57925ab0877b843f4fdd6be8","libcubeb/googletest/test/production.h":"a36d10545d12ead5e93a3b0fdca6ff73405f29091cfe38164415e9038888ba8d","libcubeb/googletest/xcode/Config/DebugProject.xcconfig":"fb42302df29bd8e8b5237194c0c04941f0e578527037930d88469baeb7a7f62b","libcubeb/googletest/xcode/Config/FrameworkTarget.xcconfig":"9935ddabe221f074d2f3b969a137d12b0dc0f845a460f58b63232987cb0f37ff","libcubeb/googletest/xcode/Config/General.xcconfig":"0fb768924daba1048f8db28b3a1fbf915b6f788d49d9d37e85979aa4ee92e02d","libcubeb/googletest/xcode/Config/ReleaseProject.xcconfig":"a4878ddd1ed78fb411906623cb51bc0ab4aea1cc3feb5379d2ae2862d8bf3bf5","libcubeb/googletest/xcode/Config/StaticLibraryTarget.xcconfig":"5886291788b3e9d5aadcb979ff055fd26a2413be81016e7afffb813b627d177c","libcubeb/googletest/xcode/Config/TestTarget.xcconfig":"f074e6c2516a6063b253ec6b842d74f5c2abefc7bcf8d8da54097a7bfe016480","libcubeb/googletest/xcode/Resources/Info.plist":"5b7f78a6d5810ce5490649793175c8982d41e6b49af06bc0705bc061567cc9aa","libcubeb/googletest/xcode/Samples/FrameworkSample/Info.plist":"1c13d83e5eed45689d7fe4bf4681030366474bc40608e39e1623c1350513a0cd","libcubeb/googletest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj":"1cf0e1b1abf84414372faf9c8bf634e01fe5750bb3ca769b1eb25fc530b21358","libcubeb/googletest/xcode/Samples/FrameworkSample/runtests.sh":"a587e5b00a8353dee0aca5a4c59b28301ccf7648dee8c79b62a9223f9fc3c8cf","libcubeb/googletest/xcode/Samples/FrameworkSample/widget.cc":"562a2bb615e93186012823c9b41761769638a11e38b54498ad5f699038c8fd32","libcubeb/googletest/xcode/Samples/FrameworkSample/widget.h":"0c7915e45cf7cb8d67db24e49cd0b277f23f967578f917f8e859a6adc4b156f9","libcubeb/googletest/xcode/Samples/FrameworkSample/widget_test.cc":"6a1a49d64912d9829ef3d991faf5a3f0e1e081126a1d8d387cdfa84fab70dc77","libcubeb/googletest/xcode/Scripts/runtests.sh":"1a0672a4151b16f3c797478ba26c534e82b2faa603f90b9aa14e785805f7683a","libcubeb/googletest/xcode/Scripts/versiongenerate.py":"4b9d5c0f4e1b556084109311d156bee6d781968dc5b1dfdc8702364508f1dd43","libcubeb/googletest/xcode/gtest.xcodeproj/project.pbxproj":"a1224decff058bfed01b8eefaee13cab0129492615548c6d0d878003a154f7ff","libcubeb/include/cubeb/cubeb.h":"a73748e7fafc73122a81f0639e9148179ca29b6582f225000a60283bf68417ab","libcubeb/scan-build-install.sh":"1ecf22aca367a4d02f810c4cb78db8636e08a12787e94e30c441ce439cf4a265","libcubeb/src/android/audiotrack_definitions.h":"0d5ec772f9ebf61333bc16e61a081a7e3b4cc02342ec4f8f417e220d032fbbc6","libcubeb/src/android/cubeb-output-latency.h":"000fb7bec38105f54b9d40fc436440c637d63390b219775d335216d29d767226","libcubeb/src/android/cubeb_media_library.h":"f67965fb2ea38f0023eb4c76024341ba9563ac1a135507b6f12a9aabd85e30a9","libcubeb/src/android/sles_definitions.h":"24e400ca2330ec16d3a37b69b74144697b51dce17f9ead763b1a6ffedc5633ac","libcubeb/src/cubeb-internal.h":"ef7e7e19c40f743c814a39b8a47b9f03df054894018ad88b49129ffad2564bfa","libcubeb/src/cubeb-jni-instances.h":"8195554372bf60dea569873c9e5fb1106a2cf5dedc66a13d2bc967da0ff48a12","libcubeb/src/cubeb-jni.cpp":"81f001720c41c69b5927e32bd19b9e8e7176d7c33d63c2a58bd0d695dace4fd2","libcubeb/src/cubeb-jni.h":"73f810a32087a6062fd49ba89542655a7e19cecac6f40f8411e1d77ce42a45d1","libcubeb/src/cubeb-sles.h":"dc84a01ba4de9db1ff108609930b36ba442020ccc3e3d6f16528f429426c430c","libcubeb/src/cubeb-speex-resampler.h":"dbf543eee4cc6e40ba3531a39d327e2cec884c19e26c570aa7eae0647e5f7420","libcubeb/src/cubeb.c":"2de6d02fefd308dcc755dc9009cdb42d2d60f900237b4eda305ddcaa180f13db","libcubeb/src/cubeb_alsa.c":"6c833e379eea5d64a65a209f8e60c2aa2d6e038ea855554cd3f2664c463abbcd","libcubeb/src/cubeb_array_queue.h":"5264ae02799c540ff73e8eb8efa55986772b22562a025ae227c2603b6b8d1036","libcubeb/src/cubeb_assert.h":"ab8ed4fe7070a3aed9419c5f9695fce2318c4dafd91213ae61cac476e64adaa7","libcubeb/src/cubeb_audiotrack.c":"fe66d36dfecbfaad164ee8c871b39fd6e708a2f8f1f8524a5c0148ab86bab467","libcubeb/src/cubeb_audiounit.cpp":"8c127f884bb773e3856cc7c1f74b85210d1c589b199b61a6d6322a9c0bc1fbd0","libcubeb/src/cubeb_jack.cpp":"129c011feb01e8c6d573862218c31a8bf90522539a28a5ece8bcf87867be9daf","libcubeb/src/cubeb_kai.c":"a71e1de94211ff0e5667a218d71588f1e74102ccf0140b80925c277949871095","libcubeb/src/cubeb_log.cpp":"74bdc0d92a31d6b4ce3c376c6d310db583b869d673e40e6bd0ea795a1e2f937a","libcubeb/src/cubeb_log.h":"ee05fd22ed9820bed79247b8603cdc64f67bcb145be47e78bf0a0e99fb6c0806","libcubeb/src/cubeb_mixer.cpp":"4fd0b0ba6bcf13ae9cede517e427eae38fd7bd6c373deac0d5856a8de65f6a92","libcubeb/src/cubeb_mixer.h":"e94205c1b98859e41eeab2cad53f635f34f57a2ae95aa23a36461a2619abf81b","libcubeb/src/cubeb_opensl.c":"d10d2d35667a48c8fc31f0ecdd47a8c62d7988bc83fb53d4186d0f37c0fc2ad3","libcubeb/src/cubeb_osx_run_loop.cpp":"13c029f7ea04808597b8841b13f248c4476fb7425762f01a59bc6c944cab3a78","libcubeb/src/cubeb_osx_run_loop.h":"ffe80df60b8ea3d0341715b72cc60aae2e0df45141887c01117df543260a0ef8","libcubeb/src/cubeb_panner.cpp":"405a115ff0eb5f00dbab6bc8f2999b02ee4ea4792a87bad7ebd7218ee7980438","libcubeb/src/cubeb_panner.h":"5679df1b9d138c91f6ea642d51e6230cdf3163bdd65db156ad45906916cb74b0","libcubeb/src/cubeb_pulse.c":"7ff5378b793f16fe3a238cff655ad464c94c7a7fc86258bc6588fc3f429e281f","libcubeb/src/cubeb_resampler.cpp":"2d5f5f4ff242d61897b62b4aeaeee85633be54c1eb155c9e35a2c67d8d5b7043","libcubeb/src/cubeb_resampler.h":"ad9800a40c0272fb2a451c02367cc5a516a3067d4acf963d35eb31be367f9224","libcubeb/src/cubeb_resampler_internal.h":"4b4eb6aee343b9c1f73cf17b201329d3714ba44b06ecb1cebf950fdf93a9dfe6","libcubeb/src/cubeb_ring_array.h":"db8dec7a6d778a424045e5ac61c2bc3a3cec8c4fe8e4780f383db4b6f1b2438c","libcubeb/src/cubeb_ringbuffer.h":"2296255ca7835a3ace2fe1852054f43428b677f432b4174bd832ad0224a409eb","libcubeb/src/cubeb_sndio.c":"d64d6ed34987d89a3041988274834a8346c3af6f08e3dd641a0cef2c71eab6c3","libcubeb/src/cubeb_strings.c":"60f2b8c03a5a01925f9777eec0ab84b0e704b40c03e0d6b9c0e7a16246c81fde","libcubeb/src/cubeb_strings.h":"00e5dc97cf16e28cfb53aaae50ac0e3c0ae8a82aad0720ab6842ce5d9785c39f","libcubeb/src/cubeb_utils.cpp":"5bd7de8bbf7bbdc3a275525edd92bad590fb90fb4d35e77017fdd5d25a5769e6","libcubeb/src/cubeb_utils.h":"27baa42747771bf9232741382b83722f5c731e5dcd4dc2e9b595aca91c5647a5","libcubeb/src/cubeb_utils_unix.h":"2a48bd2aefa1b4e4e4968121512bcaaa6be3bca6597ea390b8203c338f5c49b5","libcubeb/src/cubeb_utils_win.h":"74658b6266a8a223c681b0fd06fcc9c891c7b0b95377635c6f1763b240c2ab27","libcubeb/src/cubeb_wasapi.cpp":"1d476782be50c0944ed0ef4b24f8c64b17e315e1051941aed21b79d7bd06aeb0","libcubeb/src/cubeb_winmm.c":"3f59675847c8ff899d34898616d813b12bd3b6c925cb32fb43f6f9357d0cced5","libcubeb/src/speex/arch.h":"2300bce68c588270cdc684dc7f01377e5e251529f4545d93771e111c56d51b0f","libcubeb/src/speex/fixed_generic.h":"306ee7453677fa6067f16c79d358c6c90a9d3d008850b493cdaa59c07e6375c1","libcubeb/src/speex/resample.c":"9c3a1c64ecf3750af82c980d01ea73d3682f73c332a580465d1e787e5c54cd00","libcubeb/src/speex/resample_neon.h":"7d3fd7af9a1ddde22518b9c7b4419073b72b2dfa5be4c3bc8796992bc87b3da0","libcubeb/src/speex/resample_sse.h":"5a196d8e2d8ab5c956f5252f09f5ddc55aee1f99b1341af3fa54a1f4c2157924","libcubeb/src/speex/speex_config_types.h":"24e3ffbf29e5519611a48e5acb959645b01d166dcb4369380d5f776c3f53d4cd","libcubeb/src/speex/speex_resampler.h":"7e439ec0dd30c32216b3ced17135f8992e5aaf53389d3f5996a7d900c453e65f","libcubeb/src/speex/stack_alloc.h":"e8a2fc0874942d2c7177475fcc141fdd0c0156200b8a4e7656d4a20313e2e569","libcubeb/test/README.md":"1c11b038f87daf10ea78abc17bdbdd157940c241df548c24d5872d142a98c1af","libcubeb/test/common.h":"45eccf0f0c506f2f424149bc434180e296f85ed682b3ffca78cd53f91487d210","libcubeb/test/test_audio.cpp":"c10a9f438d8667153cde2ca13e4b2eebda22d0db93a045299fdbd8c924c44c6c","libcubeb/test/test_callback_ret.cpp":"fdcd25f6da30f2e1dba147d2a790994737d61afbaa30e0e0e9bf41dd5fa41953","libcubeb/test/test_deadlock.cpp":"c311519f30c05300715e91b529685a0c61b8e6b67161fa1f4aeb7030587d86f9","libcubeb/test/test_devices.cpp":"eec312a08667d053216a4266ef9e2b04dcdfa487cc4d34a811bb64cb33ed2937","libcubeb/test/test_duplex.cpp":"add22390fe2dbba09def4cece9a0a6a8e69b24a97f874312b931ece43b1ec4c3","libcubeb/test/test_latency.cpp":"0ace31644f499d69adcfa0aa3bad8c859ad51e97b622e2fa6d26374b8af12894","libcubeb/test/test_loopback.cpp":"e5dfcd868b25468a43dd4d8482702b9494e807db05c041b6fdcb295c59f1f01c","libcubeb/test/test_overload_callback.cpp":"8a05771e5bedfabf9f8a2e5a9266df90f5e964ead3b07782e2e435d7b69b0beb","libcubeb/test/test_record.cpp":"76d5b4f738ca7c30836ef6cc5851f3e04e396b21cf26511e0eeb7a616049fa04","libcubeb/test/test_resampler.cpp":"ca4bc0493ce0c3a5f02f389ac6e37bc2cdb9a752faad2b6fbc5af0a2223ef645","libcubeb/test/test_ring_array.cpp":"27836d716616abf8b020a710659c10ac5e1d4b64149d22cb89bd7a7a5a5669d1","libcubeb/test/test_ring_buffer.cpp":"f6e5a9f552f15808eb8ac3405559bf0ea61e7da4219cd14ac49fff3bfbf49ca7","libcubeb/test/test_sanity.cpp":"f978de12e7046518fbf848fcb5dbb2b5033c7624d5f4b59c0f3e02e7155c3884","libcubeb/test/test_tone.cpp":"3938250700c708c9c742ec8d0c9c2984f3e11860ff8dcacdf0ce785d4668f789","libcubeb/test/test_utils.cpp":"e8d7a02a9096dbc0fd15d71f9849415d52958d2ed82cbc7b8507d3228e08d382","src/callbacks.rs":"b4b4eb3f370475488d7c77b338b0bceee94ef59ede8ff41fa797a3d35ea98b5d","src/channel.rs":"e46dfeed13867d397c58dcfceb3691fed8b438783715f4e10a2767c25bb97587","src/context.rs":"96bf3442b1dd40262d3088dbb6c473f5451fd91320cef93c522b40f284599803","src/device.rs":"5b65e1c1fdd53fa5208f20bfb809475cbb3c434e02db7d0e4771d13c86f8e369","src/error.rs":"406e3b843ed2d263fe677c4b34fb96a6d780a68bcb56a6f85f041d20d70227bd","src/format.rs":"d4d27790c20eab0b16592f60d5e487425a45a268cf4c74cf843c10ac91bbff4c","src/internal.rs":"c3af5f53dc7957860bf3bc0cd9737d094fb8ac000e7b40c569304cfa76a43145","src/lib.rs":"cb49a3dd8782369172a2f8a61d5c74b4615bfb5fba3677af7d5c149e47d71815","src/log.rs":"6694178177775f2ce5449435d00609e9361c836e23119c07d04892000587dc55","src/macros.rs":"caef13f5d23f7a3ec1a54ec3ca2390ac4ad89d521893f1d0864daf70d57a20aa","src/mixer.rs":"e72e92855614da187da6419ed0a115062a05670cb73443b2ea4313d8f5108a68","src/panner.rs":"341af4b5a5331a3c1a4ab5396125a3600945e588ea33350431dfe6f1a9a0bd80","src/resampler.rs":"762070f8afde2256715b8764380cdfa1204a1a39d98a9da0b2efe88699792f2c","src/stream.rs":"ea3080b6225949938098e3ac38c42939c49a91b322b327ea66e959fe41f51763"},"package":"01f633e04a9788ebbea80af3b03505ac2bd2ee4196c19ec6f618025b55e3c1a8"}
\ No newline at end of file
+{"files":{"Cargo.toml":"b43b0c932a03f5d8372da2147b0d505f051a3f39eaa3b0f0de876256fa842ed7","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","build.rs":"49985a30631de0015517fc260321aa03a003eaf26d80650bebd928d55edc9444","libcubeb/AUTHORS":"829e45d138c7c8827799f302806fa4be8cd8bd4bad70a2fe26c3a27a5cf36948","libcubeb/CMakeLists.txt":"381886472be5fc0f925aa42268fd2df9f17f5613ee7db489849af474189f0358","libcubeb/Config.cmake.in":"88019286c96ef3d5d3a673b183c8655dfc97ceede07d3eb6c18f0c51bb896388","libcubeb/INSTALL.md":"7a84cdfbe86e7d3180e2203603b88571df61b369421fa97ee86740ffd4d4db8e","libcubeb/LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","libcubeb/README.md":"aa417156dc65069264901b75fc3c792c73021ec61c909de04e109bd4184c07ab","libcubeb/TODO":"6f8065136e005d2becee810e3d8697a94f2c755f8c79687adfac7136ad165e80","libcubeb/appveyor.yml":"9a87fdc18b76fca1167289ecb2ec3a210b76984c1d7e92268b2cd36f1e00f541","libcubeb/cmake/sanitizers-cmake/CMakeLists.txt":"89b282c19b3897ff666f7847d5e679ae928ca7e76ffd0d23f7c58c9464048b61","libcubeb/cmake/sanitizers-cmake/LICENSE":"4b67e7ae8c91e68e1a929eb1cbaa4c773c6d19aa91aaa12c390cf9560d1c9799","libcubeb/cmake/sanitizers-cmake/README.md":"30ab1524618ac828b75f9b83c665a0bd50b839b42ce61519a8048d73f401da6e","libcubeb/cmake/sanitizers-cmake/cmake/FindASan.cmake":"cba07ffe438c57bef0840ed6a2d2890676530b66509da3c616438c53018baa4f","libcubeb/cmake/sanitizers-cmake/cmake/FindMSan.cmake":"1303aac5028fe9f64d42be0afd47f1291e679d74f8280b3dc5271f20ebf4d7a4","libcubeb/cmake/sanitizers-cmake/cmake/FindSanitizers.cmake":"ce1971b943bbef08fb9aba958cf28e3cbdff075406c85a3cfed22e00c9f8d9a8","libcubeb/cmake/sanitizers-cmake/cmake/FindTSan.cmake":"edca39b287312e9a8fc718f6ec791d2520515900b37426091310fe1bd52dc6a1","libcubeb/cmake/sanitizers-cmake/cmake/FindUBSan.cmake":"5b9d3621f629c807a1345a7cb053677a8bf25782a079e345dda53d04aecdc4b7","libcubeb/cmake/sanitizers-cmake/cmake/asan-wrapper":"4e543936e6374e24b80a0f92135c07c2e2101c0d110e51bddaf0e70ae8ec391e","libcubeb/cmake/sanitizers-cmake/cmake/sanitize-helpers.cmake":"282620734c2a8062f1280d0dde3121b8b01af26e5ecaa7d4308e145f80ecd115","libcubeb/cmake/sanitizers-cmake/tests/CMakeLists.txt":"fb983bab7040be002847db59c2493abfd249f67ad06e3a9270fbceb9fabda11c","libcubeb/cmake/sanitizers-cmake/tests/asan_test.cpp":"8b351c7c8668b4a2438286df426f0ad322cade6d1c6199a74668ccbd1c5204a4","libcubeb/cmake/toolchain-cross-android.cmake":"59d2355845a71647b353fb8b18fca630db8ffee7bb8500143e2d6fbc409cec97","libcubeb/cmake/toolchain-cross-mingw.cmake":"b09dc261981c0d4a0f8430f05aae9c8fc545651cd9cbfacd09754277b776b532","libcubeb/cubeb.supp":"19f33e59f8dc91a327c923e44c2c3f9af0a043ce1d6a8cac275ba094b4bfe0da","libcubeb/docs/Doxyfile.in":"0815f19789cedd310652a133bab260c27b57e95f7a65458df2dfca38ea4f1041","libcubeb/googletest/CHANGES":"72c8a289bfe4dd9160074a3a2238c8067a5bc7ca49fd87f70a134c3f373932a4","libcubeb/googletest/CMakeLists.txt":"cdf938ce79ea066866dc614de3925bfaa48d9e19e04049db2ec8c5443abaaa9b","libcubeb/googletest/CONTRIBUTORS":"4d911cd5e6d71f3f4bbcb2788b2f916df4b0ce1e088752a159457a1d936ae0ce","libcubeb/googletest/COPYING":"9702de7e4117a8e2b20dafab11ffda58c198aede066406496bef670d40a22138","libcubeb/googletest/Makefile.am":"a795e5a18e82ba06fd97509d92d773b7fafd0dd7086db8a1211fbd151b503bac","libcubeb/googletest/README":"484b19654362942fac9734c8fab0ed3d99249b81c69027bdb7de46054abada6b","libcubeb/googletest/cmake/internal_utils.cmake":"6f4670a5825cf8ae0415be9dd43d82a7f30316d75cab20a4c60afb6d9db2a01d","libcubeb/googletest/codegear/gtest.cbproj":"9fa07a66b8c01773256e508187775407c465ed9055651e93d390426d1888721a","libcubeb/googletest/codegear/gtest.groupproj":"76c001cb2ee0070e26d1570fb6db5250f2585179c707496c5ef6d12e582cf205","libcubeb/googletest/codegear/gtest_all.cc":"c8750dc2b7b3612edb60e8d23fc2f60ae264451916c4b15f81cbf60ea30eb75d","libcubeb/googletest/codegear/gtest_link.cc":"e5e47c086f932471e0ca748a62b3b1597e5e731f4d34fb8cb8b2ca2db7ba3ed0","libcubeb/googletest/codegear/gtest_main.cbproj":"056448ba7f41fae3f704b1001922d9f6e419cf8cbcf3a55bf0ecc59ece1fa9a1","libcubeb/googletest/codegear/gtest_unittest.cbproj":"2c48be90b0dbc3224a8bd6c4dc21f78dd1b08c81685e6bd4952bb6df6ee38701","libcubeb/googletest/configure.ac":"fadebffdaeaccebb60fbe4a501c1138c296e01348a5da45fabf5e4233248baa8","libcubeb/googletest/include/gtest/gtest-death-test.h":"fdd087f700cd04a3ce4bdd36f35769de52a44bfc0c5bae2dc9681d4cbcd3c44a","libcubeb/googletest/include/gtest/gtest-message.h":"eaf44df1284d94333507c47091c84eaaf43814e6a02a1b1c0061ca7b363e74d6","libcubeb/googletest/include/gtest/gtest-param-test.h":"f226f0a24c04cddbceaaa45d8a5e575ce18c3392349f9b8ba73317e37e62368d","libcubeb/googletest/include/gtest/gtest-param-test.h.pump":"17c65fd5cc5218279044a61f3873c9c952b0924a7ba5147d4999d400b122207f","libcubeb/googletest/include/gtest/gtest-printers.h":"7046f611398d63ee0f1c37bdb4fd08d9931979b2fedf13b781e6d85d4b3b5d60","libcubeb/googletest/include/gtest/gtest-spi.h":"560407dd45e8e57fa6927504c9e4a4cfdecf30f8cada975c1ffddce765e6a88a","libcubeb/googletest/include/gtest/gtest-test-part.h":"c4d6d840284728740c284646075e8ffc85b63b9f74f3ed488b18ef3c2c2b9005","libcubeb/googletest/include/gtest/gtest-typed-test.h":"1ec858bbb9ed8a8bb553232df016437c080b2670f00453b4de297c286eb78c21","libcubeb/googletest/include/gtest/gtest.h":"47433ca72a43bda7a380c34fe6d4ff451797c687e9bbd74d1f366bcdfa0cb013","libcubeb/googletest/include/gtest/gtest_pred_impl.h":"f03a3f77e3c231889c0ace6f63b2c4e410e4a9330287ea09443b23b9a3cf9092","libcubeb/googletest/include/gtest/gtest_prod.h":"4a99a3d986a45b4d6d9b3af54809f015c54aa98274793a4ae173f5010d0ad33c","libcubeb/googletest/include/gtest/internal/gtest-death-test-internal.h":"0b3abead866363f3e6b4201acc8d2763072e033826b22ae5ebffd790e1415235","libcubeb/googletest/include/gtest/internal/gtest-filepath.h":"638d2bb6c06a894513b03311a8e931ac835fc00afc4bd21fab3afc05732c23a0","libcubeb/googletest/include/gtest/internal/gtest-internal.h":"12c2c83df0a9dc5b46697ccd8271dfa34ee5f3d1972dcb56585bc1459d9583c9","libcubeb/googletest/include/gtest/internal/gtest-linked_ptr.h":"9bd319548dd073630dfd349c06a440c6a582feec47d4ff14f348ec32f8b4c1f3","libcubeb/googletest/include/gtest/internal/gtest-param-util-generated.h":"10db93fa7e98820192bae6f560664469dd33b265036fca64253c89b6801f96cb","libcubeb/googletest/include/gtest/internal/gtest-param-util-generated.h.pump":"abb72365d94d2811b34c195dc520fbf41c7dcb42aae5a1cfa0502cf619b21e70","libcubeb/googletest/include/gtest/internal/gtest-param-util.h":"7f9311f033ef6916217d87cef53b1db6c4e8733be930e4b48fe7e11d21b33da0","libcubeb/googletest/include/gtest/internal/gtest-port.h":"612932c2930a7cf2c3514d89a8d6b51a2c0030d251309b71765ed1c9954e20c5","libcubeb/googletest/include/gtest/internal/gtest-string.h":"a46aa36165c400d1e926f942be03fe04cd7ccb1e59f7a2a03b919c4eea05b997","libcubeb/googletest/include/gtest/internal/gtest-tuple.h":"43e7e3c92f8e4258cf3927a9204b214d4d03e6c796f88f3ad4e66b1ac20aa938","libcubeb/googletest/include/gtest/internal/gtest-tuple.h.pump":"16fa027ed3c5940699e0ac906815e66620993bcf75b0acaf826d4f09348d4b83","libcubeb/googletest/include/gtest/internal/gtest-type-util.h":"6d177af46a9b1e14b969972a8b886667f95e69037aba411433a44fb9b92e7037","libcubeb/googletest/include/gtest/internal/gtest-type-util.h.pump":"22092f44127af91651f57ce222e20914d5d32ae02f1c0964f6d5d7bc019af339","libcubeb/googletest/m4/acx_pthread.m4":"3326e3746b6b351d1671fe31f798269cda8de92c365b8a8305404ec0fa6c6b32","libcubeb/googletest/m4/gtest.m4":"d3c37ebd1aa792c967d4357755cc670bc6deb30091d9e6db498871d90a30ea4c","libcubeb/googletest/make/Makefile":"9b86e2a112dd55c6bf6a2b39e6f4078faf60cfecb8282ebf9b025167ed233420","libcubeb/googletest/msvc/gtest-md.sln":"0beab679b42cf0c431eaf4fe143bbf3b01fc064e20c74d9e33e7e437a70487d4","libcubeb/googletest/msvc/gtest-md.vcproj":"52e873e964daf9d5409b4e9bb471ddf2827be04985cd96c40620f9275d17a256","libcubeb/googletest/msvc/gtest.sln":"be21c2340650ec2259a2fbaeb8608ae6d3e982a0626a0f91128a771dc88e6bea","libcubeb/googletest/msvc/gtest.vcproj":"0064616c7d88a284c1b7c05baab038f239134ea9c6c563628f286f9600b3f921","libcubeb/googletest/msvc/gtest_main-md.vcproj":"f83a294a92b616bf34ccae6743ff916297bdba61d6125a9637a813d467a30372","libcubeb/googletest/msvc/gtest_main.vcproj":"9f03270a00896eab0c7015c6fb1a73818d024e462d3944ba1d3ceb313a051649","libcubeb/googletest/msvc/gtest_prod_test-md.vcproj":"7caa108733e2d5f140da004d2133e04a9a105811909c0e2d4ec06e2971983592","libcubeb/googletest/msvc/gtest_prod_test.vcproj":"cf5bfb7f3de9a59a0eba5535067845d12c33c3fd8fecc3d03aa702665db29578","libcubeb/googletest/msvc/gtest_unittest-md.vcproj":"e7949b21cf0418f2a7afe8aa94616e2c40e3ba0801c2f0826f3a3a3d2e6f48b0","libcubeb/googletest/msvc/gtest_unittest.vcproj":"5b097d596fbbc1c4090fd518008a0961b29661194e1c02d8a2d3daaa557e626f","libcubeb/googletest/samples/prime_tables.h":"2903df1d1e6643a5f624fe3ea3f931c3410eb1858ac347c5df278273c6c91ca4","libcubeb/googletest/samples/sample1.cc":"dc106c5940d87bb4bbef3d77815eab642ee173a3340b2b9c532b5c711c4c2d0e","libcubeb/googletest/samples/sample1.h":"7a7bf9a0fbd2401e8b2cb554bfcb9bd0ed228212f3b970675c1b1d38d4e188bb","libcubeb/googletest/samples/sample10_unittest.cc":"ccebb6393a5a8468399f7e511219b667a2233f82312ce59834a4bb0997d8700e","libcubeb/googletest/samples/sample1_unittest.cc":"904be0d4a095e74393515195392bd10e1e916bb2ca61f3f94b1bd6aebea29cb6","libcubeb/googletest/samples/sample2.cc":"f14b8a1e69d52eef1a70053fb256818c7eca64e8eda08de43cf46e896e57fcc2","libcubeb/googletest/samples/sample2.h":"df956ba520dafca068dbc1e28f36567db3cba36293e06762318af8cda6a12bd4","libcubeb/googletest/samples/sample2_unittest.cc":"abe7e0b253d328cb82ae67623fbe3c89eb94699102510c64a0b568eaca101e05","libcubeb/googletest/samples/sample3-inl.h":"3fe482bbd4f725f5820f5d6beab4d0d4a524be8addf4b344a9a470ec5aabc451","libcubeb/googletest/samples/sample3_unittest.cc":"252c06b4531dc35213ebdd7311700b9b4057bc1bdeeba0cd767b2bc86c456639","libcubeb/googletest/samples/sample4.cc":"b4260f5fa35d78ac114a9abb59fce12403faf0273df41f57e83c341ae7979222","libcubeb/googletest/samples/sample4.h":"604905cae7e5587805c3b884a36eda7a2bebdfedb53b24b0fd9a220eec0ef1a9","libcubeb/googletest/samples/sample4_unittest.cc":"6cfb4821d8cb1c77fbb5af4f8aec569948762d8ea314827e3ead967b5b6a223e","libcubeb/googletest/samples/sample5_unittest.cc":"73646d9038873a68bb2e56b12495d7f7b65b5c23901109701da446af454ba2ec","libcubeb/googletest/samples/sample6_unittest.cc":"833fee399954f908cf0f3b789832e505329787f4cf73607a7b31ca0f62f368d7","libcubeb/googletest/samples/sample7_unittest.cc":"8013ee68d61c181e4e936cdae3a9a635646274f8512033ef11bff7214e03e4a6","libcubeb/googletest/samples/sample8_unittest.cc":"7b7510fadf4955d2f934d23d652dbd35add832e50bdfcc98421fb9be4588d808","libcubeb/googletest/samples/sample9_unittest.cc":"8b827040dea37b460cbcaea0b255b98974a9840f6ef7bd82aaa7d4ad2c724335","libcubeb/googletest/scripts/fuse_gtest_files.py":"adecf64c6bab65b31740c321e568cf174f753d5617745aa5762d842339d68b53","libcubeb/googletest/scripts/gen_gtest_pred_impl.py":"78fb7e20a014c251d723186eb58040e4eb32405b73c9288d787ea0a0e4ff5183","libcubeb/googletest/scripts/gtest-config.in":"9a43978eeee88e188845d737c17f4d024d4e74feae09da7997e8fbe4ea6cc176","libcubeb/googletest/scripts/pump.py":"3856a3d7be37f78e0f214ee7d4f29d05f1ca14218b67539d67c9a16e992f670c","libcubeb/googletest/scripts/test/Makefile":"3576b257594a2d8e843b9e4de8c83353d837833bb86431fb1b4198022b1bcddc","libcubeb/googletest/scripts/upload.py":"f75d0712e3b13bebd8daa0a15e4eb32c9e3034a933f4fcccf65b1e999a7ae066","libcubeb/googletest/scripts/upload_gtest.py":"6e76fc0a7a3831c01cfffd18c220d44438073a66338d91ca61fc84b924021e61","libcubeb/googletest/src/gtest-all.cc":"568ac119f5e6418f1fbcfbdf185d724657d7f3539b47822da229ac5d015626b2","libcubeb/googletest/src/gtest-death-test.cc":"eec1b3c8252670c76acbbaf63483946897ce625139b53a566406b6313f023896","libcubeb/googletest/src/gtest-filepath.cc":"31b7fcda5d11346f8a487597c6a70ff057f1192e0cb11f27eb7841a9f3aa8b86","libcubeb/googletest/src/gtest-internal-inl.h":"c9d428a6b5990ace091e40c4ce8b7bf6c50c186a8314b1c4a4cdc988ca0ac1a4","libcubeb/googletest/src/gtest-port.cc":"95bcf473622d1b901c734e5c2aeb8efb058555ec924212a61bb04f049bb5a069","libcubeb/googletest/src/gtest-printers.cc":"6f191a7fc7f5a0a967fd11964057f2e2d2eaf2f37ccece16bd816531f52b3154","libcubeb/googletest/src/gtest-test-part.cc":"e489868b4cdc66f4fc33bc2326ac86bc1acc5808ab58bbb288c9dcfc330faddc","libcubeb/googletest/src/gtest-typed-test.cc":"ca9e819df728c25a6a1fc072806c22f3494e1dffe4bd0d48284f38dbdd3a0dd5","libcubeb/googletest/src/gtest.cc":"5cf9a3e897892c9f0e5c887f91d3c8c8c5665bd7348560441fc0b946c254873c","libcubeb/googletest/src/gtest_main.cc":"22fa1f77542b882d1798d7f696045c5895942a626e26200a175fa4382e1fa5b5","libcubeb/googletest/test/gtest-death-test_ex_test.cc":"613ccf50a3ff8f84c975a13e86ea01ea4e36933072388a3738b4acf9ed3ed7cf","libcubeb/googletest/test/gtest-death-test_test.cc":"df8384a847bdf889233c3d45d171f784991def7a9b6a08442138569fbae32b9d","libcubeb/googletest/test/gtest-filepath_test.cc":"49760f91723845b113bb60bb9b1a1426ed1da1f4ebfef2462128980ea5692cc9","libcubeb/googletest/test/gtest-linked_ptr_test.cc":"1b9cb4ff67475900db9de34ae9749b94193048a1f7a741091ba5a2dd7fc7a79b","libcubeb/googletest/test/gtest-listener_test.cc":"acf78f2c9a730525ea5adc93e9196a42de8fbfe488db1dfd02656bdbd477b2c0","libcubeb/googletest/test/gtest-message_test.cc":"b1fc68f8b75ce25fbd79b3f7d3c9c793381ef07b3203e1a2d9b610cb597542be","libcubeb/googletest/test/gtest-options_test.cc":"74e3ae0c310edb3139b0032266219d3ce7f386ded6feafa57fef03f4493ed7fa","libcubeb/googletest/test/gtest-param-test2_test.cc":"a0f1efbcab3f7e49df639383157626931f64756f7e738be081760f93f7308332","libcubeb/googletest/test/gtest-param-test_test.cc":"ef8bd344e959053f562b0c9e0d15e2fb6c1e534772a67aaf3f90bd6bad0bf99f","libcubeb/googletest/test/gtest-param-test_test.h":"9d7f47b79d54df7cc050aa6038b0464aa684dfca669a847bf70ea16e4a000628","libcubeb/googletest/test/gtest-port_test.cc":"1600f78ef0860a0f5b5525e5e5041ff32a216cc6ae948b1ea61fe04ec603f67d","libcubeb/googletest/test/gtest-printers_test.cc":"7898e4b4163ee0821fed248e1c75d9f4a0a511a2b4bbfad1ef2f4a11a099f6e7","libcubeb/googletest/test/gtest-test-part_test.cc":"62c8906bb0d12ea84d60217b3773cd8e1768db4aab934880db2316df7026cab8","libcubeb/googletest/test/gtest-tuple_test.cc":"2850dc1f73a3f8020d8a4d80688a28d9b736eae6d677222c3f871d8d33b25501","libcubeb/googletest/test/gtest-typed-test2_test.cc":"c52b65e7181610d6e577631cd50177399884913ff28d08aedfedc92f05185044","libcubeb/googletest/test/gtest-typed-test_test.cc":"c7daff5211028da79b3ca0473dca18ada9197f38e710f72d0493ad3332ce3ec9","libcubeb/googletest/test/gtest-typed-test_test.h":"3145698534d8869beb624c9c8ed114f75bead046b2eeb92ada5a724993ee7786","libcubeb/googletest/test/gtest-unittest-api_test.cc":"e3f54c28ef2849e8b12af666ed46aace50c3e047845072ee6f974ce4528bd297","libcubeb/googletest/test/gtest_all_test.cc":"db0c3c42b385570b1d517e3ee927671b8fad4e206247fca738ec477222ac3d97","libcubeb/googletest/test/gtest_break_on_failure_unittest.py":"11c91bc1c68cfdb913e2affb01261b55fb3b0c18773a45875e9c25cb330a4dcd","libcubeb/googletest/test/gtest_break_on_failure_unittest_.cc":"1da12e4bdda2a0bc7b59d4638fe34b2d3798134224fd9237eeebdd09c3326011","libcubeb/googletest/test/gtest_catch_exceptions_test.py":"305cef45c6dc034bdf72fd91aba1e89e1c6b5d222c3d6baffff5acdfd9b3873e","libcubeb/googletest/test/gtest_catch_exceptions_test_.cc":"b297a4f4d5bc0285ea9eb8869741631658305e49d4513bca904842aacb82128b","libcubeb/googletest/test/gtest_color_test.py":"c4cb006682a40f2d88759a4bcabf0d4be623720b135c71447f1788d17ea23d0f","libcubeb/googletest/test/gtest_color_test_.cc":"f263ba349afe58a558bf0fee98a98bb9207a648e7cd4f908a87799bd13d001ea","libcubeb/googletest/test/gtest_env_var_test.py":"79819598cd1e366eaa8f2a4fee2d638b6ef0686e490402fae792ccce58d876c0","libcubeb/googletest/test/gtest_env_var_test_.cc":"0eee5dfbb2a2598f4e76626346b921928ec1e052e38f254cc97c60d05611ab46","libcubeb/googletest/test/gtest_environment_test.cc":"a52a21ea29c2203b03fa93922733546d171f98d3b2fcd42972269e98fd124715","libcubeb/googletest/test/gtest_filter_unittest.py":"edc7d278803bba41626eacd050d91d7247f1c5999f9dceb99a8877e238bc73d6","libcubeb/googletest/test/gtest_filter_unittest_.cc":"996ac528ad75c293d8201ce28cf6acccee266286bd369b4cf43f05b8d67a4559","libcubeb/googletest/test/gtest_help_test.py":"b43ab690c08e4bffd84a47b361167496298697f9511bdf4a745bf305b5cfbdfc","libcubeb/googletest/test/gtest_help_test_.cc":"ff4b121098f0fe7cb4abf11fdd31f2fe7a477286ec9175482138bc038d61c807","libcubeb/googletest/test/gtest_list_tests_unittest.py":"7caebc175b44b3c727fc50420ada1a6a9500f3e4ce9e2839f69205437aa85e7a","libcubeb/googletest/test/gtest_list_tests_unittest_.cc":"d82d8b72914897232c2ff9fd091a7b0add68b7cf75f3f210d3a487ebeea84cfe","libcubeb/googletest/test/gtest_main_unittest.cc":"0f66f318809c88f0fbe034a340a75331720c4e33be5378022baffaf588ef1202","libcubeb/googletest/test/gtest_no_test_unittest.cc":"7cf487e07c3d27376c2cb8af33d02239b7966623875d37b7aa0259e927a9c2f6","libcubeb/googletest/test/gtest_output_test.py":"cf0dc1979572d94450a5e611b44f3fdb88d9cd980d669a723f0ed63057b5e2c4","libcubeb/googletest/test/gtest_output_test_.cc":"f69569374c2b3d06aa04a38ebc4f92ddc303e6af503f8b533cd8e6bf9f104899","libcubeb/googletest/test/gtest_output_test_golden_lin.txt":"4f3e49c10a524a99437cdcb5294e3335a7f3c07ea8462e65730f703a5fe4fec3","libcubeb/googletest/test/gtest_pred_impl_unittest.cc":"e406eccf75b6b58746a95d1c7ea7bc8e80ff974e438ef7c83074a46d4e62db9a","libcubeb/googletest/test/gtest_prod_test.cc":"b42ca1a6d0a1e43bc576b4ff7776c6d2c37234f6dc2a76f2735f261b4a47a526","libcubeb/googletest/test/gtest_repeat_test.cc":"e10abbb71595920aa3bb415029eed74106335fc9ea3d58c417ccfc7cba6a4cdb","libcubeb/googletest/test/gtest_shuffle_test.py":"12dd94eb5f30260ba37059fa74658bda57dffa821f3ba6a2a8b52ff14b1ad029","libcubeb/googletest/test/gtest_shuffle_test_.cc":"af1b2b01ae275f1a9fee7e7940c0f88f39ded063008994d585aad87e3ffadb39","libcubeb/googletest/test/gtest_sole_header_test.cc":"538414c27a593ab8dc34c37b5c877eb3a022d75d1b481ef14ceca00914929754","libcubeb/googletest/test/gtest_stress_test.cc":"0b02fc12f87944226915a999bdcc8a3eaafb34a1ea5bb0df128774abf8667f09","libcubeb/googletest/test/gtest_test_utils.py":"d4a76930aee6658ad8734981ca0c4ea14f34dbe8fdd31d5afe41f6d98f9779ee","libcubeb/googletest/test/gtest_throw_on_failure_ex_test.cc":"11ae790028da20bc7b7af1572eff3cfe8499be43ab64c110e18e1892612a183f","libcubeb/googletest/test/gtest_throw_on_failure_test.py":"ebe18ca0b07f90c53b9b3f9a54ed02df94facf8995cfa90dd41c6f5474537c13","libcubeb/googletest/test/gtest_throw_on_failure_test_.cc":"f8cbf75d8bf9e9ae068a17ff968434c3aec7b7f1137c994d8f14af1a84361aa9","libcubeb/googletest/test/gtest_uninitialized_test.py":"da8e6ce34930753e36fc1dfa2c3e20e48d02bda2a27d3d03a07364312c5f3bd9","libcubeb/googletest/test/gtest_uninitialized_test_.cc":"0b6a9d4983480f87352ca4da946089264b401f7a4a3b1282253fd6cc861bf483","libcubeb/googletest/test/gtest_unittest.cc":"c0c7d1f691ce1e10c3d1647ed5f7a66510725808ad58bb6da4bc03a7a08fb2fc","libcubeb/googletest/test/gtest_xml_outfile1_test_.cc":"29341d777a9c9d25f360d13ed966b30f0cbef1fc88aefe2f01bb88b82cf1ed93","libcubeb/googletest/test/gtest_xml_outfile2_test_.cc":"da7ab3cf0e9b2a293eceed7c5691233d6b61afb557e3c1176dfb75390f85be46","libcubeb/googletest/test/gtest_xml_outfiles_test.py":"b07927b43f44afbfd61761c2cc69f1b68c4fbdeddb992db03ff0c73052518cd4","libcubeb/googletest/test/gtest_xml_output_unittest.py":"b5ff0c0207238d01cada961b8f4656f2ec30a3e1e5bf9d22efdf1745af423031","libcubeb/googletest/test/gtest_xml_output_unittest_.cc":"ad0b9ebe63a146e386df3c5c51916869f6d4647b9832ceacc912fb1272d15f82","libcubeb/googletest/test/gtest_xml_test_utils.py":"ad89a39a6cd5b08e87082341f3e7800dbf1150ea0f1386e0b8cd374aa6832f00","libcubeb/googletest/test/production.cc":"56fef77c3a8e62073ec11653d740a8e534008a0d57925ab0877b843f4fdd6be8","libcubeb/googletest/test/production.h":"a36d10545d12ead5e93a3b0fdca6ff73405f29091cfe38164415e9038888ba8d","libcubeb/googletest/xcode/Config/DebugProject.xcconfig":"fb42302df29bd8e8b5237194c0c04941f0e578527037930d88469baeb7a7f62b","libcubeb/googletest/xcode/Config/FrameworkTarget.xcconfig":"9935ddabe221f074d2f3b969a137d12b0dc0f845a460f58b63232987cb0f37ff","libcubeb/googletest/xcode/Config/General.xcconfig":"0fb768924daba1048f8db28b3a1fbf915b6f788d49d9d37e85979aa4ee92e02d","libcubeb/googletest/xcode/Config/ReleaseProject.xcconfig":"a4878ddd1ed78fb411906623cb51bc0ab4aea1cc3feb5379d2ae2862d8bf3bf5","libcubeb/googletest/xcode/Config/StaticLibraryTarget.xcconfig":"5886291788b3e9d5aadcb979ff055fd26a2413be81016e7afffb813b627d177c","libcubeb/googletest/xcode/Config/TestTarget.xcconfig":"f074e6c2516a6063b253ec6b842d74f5c2abefc7bcf8d8da54097a7bfe016480","libcubeb/googletest/xcode/Resources/Info.plist":"5b7f78a6d5810ce5490649793175c8982d41e6b49af06bc0705bc061567cc9aa","libcubeb/googletest/xcode/Samples/FrameworkSample/Info.plist":"1c13d83e5eed45689d7fe4bf4681030366474bc40608e39e1623c1350513a0cd","libcubeb/googletest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj":"1cf0e1b1abf84414372faf9c8bf634e01fe5750bb3ca769b1eb25fc530b21358","libcubeb/googletest/xcode/Samples/FrameworkSample/runtests.sh":"a587e5b00a8353dee0aca5a4c59b28301ccf7648dee8c79b62a9223f9fc3c8cf","libcubeb/googletest/xcode/Samples/FrameworkSample/widget.cc":"562a2bb615e93186012823c9b41761769638a11e38b54498ad5f699038c8fd32","libcubeb/googletest/xcode/Samples/FrameworkSample/widget.h":"0c7915e45cf7cb8d67db24e49cd0b277f23f967578f917f8e859a6adc4b156f9","libcubeb/googletest/xcode/Samples/FrameworkSample/widget_test.cc":"6a1a49d64912d9829ef3d991faf5a3f0e1e081126a1d8d387cdfa84fab70dc77","libcubeb/googletest/xcode/Scripts/runtests.sh":"1a0672a4151b16f3c797478ba26c534e82b2faa603f90b9aa14e785805f7683a","libcubeb/googletest/xcode/Scripts/versiongenerate.py":"4b9d5c0f4e1b556084109311d156bee6d781968dc5b1dfdc8702364508f1dd43","libcubeb/googletest/xcode/gtest.xcodeproj/project.pbxproj":"a1224decff058bfed01b8eefaee13cab0129492615548c6d0d878003a154f7ff","libcubeb/include/cubeb/cubeb.h":"a73748e7fafc73122a81f0639e9148179ca29b6582f225000a60283bf68417ab","libcubeb/scan-build-install.sh":"1ecf22aca367a4d02f810c4cb78db8636e08a12787e94e30c441ce439cf4a265","libcubeb/src/android/audiotrack_definitions.h":"0d5ec772f9ebf61333bc16e61a081a7e3b4cc02342ec4f8f417e220d032fbbc6","libcubeb/src/android/cubeb-output-latency.h":"000fb7bec38105f54b9d40fc436440c637d63390b219775d335216d29d767226","libcubeb/src/android/cubeb_media_library.h":"f67965fb2ea38f0023eb4c76024341ba9563ac1a135507b6f12a9aabd85e30a9","libcubeb/src/android/sles_definitions.h":"24e400ca2330ec16d3a37b69b74144697b51dce17f9ead763b1a6ffedc5633ac","libcubeb/src/cubeb-internal.h":"ef7e7e19c40f743c814a39b8a47b9f03df054894018ad88b49129ffad2564bfa","libcubeb/src/cubeb-jni-instances.h":"8195554372bf60dea569873c9e5fb1106a2cf5dedc66a13d2bc967da0ff48a12","libcubeb/src/cubeb-jni.cpp":"81f001720c41c69b5927e32bd19b9e8e7176d7c33d63c2a58bd0d695dace4fd2","libcubeb/src/cubeb-jni.h":"73f810a32087a6062fd49ba89542655a7e19cecac6f40f8411e1d77ce42a45d1","libcubeb/src/cubeb-sles.h":"dc84a01ba4de9db1ff108609930b36ba442020ccc3e3d6f16528f429426c430c","libcubeb/src/cubeb-speex-resampler.h":"dbf543eee4cc6e40ba3531a39d327e2cec884c19e26c570aa7eae0647e5f7420","libcubeb/src/cubeb.c":"2de6d02fefd308dcc755dc9009cdb42d2d60f900237b4eda305ddcaa180f13db","libcubeb/src/cubeb_alsa.c":"6c833e379eea5d64a65a209f8e60c2aa2d6e038ea855554cd3f2664c463abbcd","libcubeb/src/cubeb_array_queue.h":"5264ae02799c540ff73e8eb8efa55986772b22562a025ae227c2603b6b8d1036","libcubeb/src/cubeb_assert.h":"ab8ed4fe7070a3aed9419c5f9695fce2318c4dafd91213ae61cac476e64adaa7","libcubeb/src/cubeb_audiotrack.c":"fe66d36dfecbfaad164ee8c871b39fd6e708a2f8f1f8524a5c0148ab86bab467","libcubeb/src/cubeb_audiounit.cpp":"8c127f884bb773e3856cc7c1f74b85210d1c589b199b61a6d6322a9c0bc1fbd0","libcubeb/src/cubeb_jack.cpp":"129c011feb01e8c6d573862218c31a8bf90522539a28a5ece8bcf87867be9daf","libcubeb/src/cubeb_kai.c":"a71e1de94211ff0e5667a218d71588f1e74102ccf0140b80925c277949871095","libcubeb/src/cubeb_log.cpp":"74bdc0d92a31d6b4ce3c376c6d310db583b869d673e40e6bd0ea795a1e2f937a","libcubeb/src/cubeb_log.h":"ee05fd22ed9820bed79247b8603cdc64f67bcb145be47e78bf0a0e99fb6c0806","libcubeb/src/cubeb_mixer.cpp":"4fd0b0ba6bcf13ae9cede517e427eae38fd7bd6c373deac0d5856a8de65f6a92","libcubeb/src/cubeb_mixer.h":"e94205c1b98859e41eeab2cad53f635f34f57a2ae95aa23a36461a2619abf81b","libcubeb/src/cubeb_opensl.c":"d10d2d35667a48c8fc31f0ecdd47a8c62d7988bc83fb53d4186d0f37c0fc2ad3","libcubeb/src/cubeb_osx_run_loop.cpp":"13c029f7ea04808597b8841b13f248c4476fb7425762f01a59bc6c944cab3a78","libcubeb/src/cubeb_osx_run_loop.h":"ffe80df60b8ea3d0341715b72cc60aae2e0df45141887c01117df543260a0ef8","libcubeb/src/cubeb_panner.cpp":"405a115ff0eb5f00dbab6bc8f2999b02ee4ea4792a87bad7ebd7218ee7980438","libcubeb/src/cubeb_panner.h":"5679df1b9d138c91f6ea642d51e6230cdf3163bdd65db156ad45906916cb74b0","libcubeb/src/cubeb_pulse.c":"7ff5378b793f16fe3a238cff655ad464c94c7a7fc86258bc6588fc3f429e281f","libcubeb/src/cubeb_resampler.cpp":"2d5f5f4ff242d61897b62b4aeaeee85633be54c1eb155c9e35a2c67d8d5b7043","libcubeb/src/cubeb_resampler.h":"ad9800a40c0272fb2a451c02367cc5a516a3067d4acf963d35eb31be367f9224","libcubeb/src/cubeb_resampler_internal.h":"4b4eb6aee343b9c1f73cf17b201329d3714ba44b06ecb1cebf950fdf93a9dfe6","libcubeb/src/cubeb_ring_array.h":"db8dec7a6d778a424045e5ac61c2bc3a3cec8c4fe8e4780f383db4b6f1b2438c","libcubeb/src/cubeb_ringbuffer.h":"2296255ca7835a3ace2fe1852054f43428b677f432b4174bd832ad0224a409eb","libcubeb/src/cubeb_sndio.c":"d64d6ed34987d89a3041988274834a8346c3af6f08e3dd641a0cef2c71eab6c3","libcubeb/src/cubeb_strings.c":"60f2b8c03a5a01925f9777eec0ab84b0e704b40c03e0d6b9c0e7a16246c81fde","libcubeb/src/cubeb_strings.h":"00e5dc97cf16e28cfb53aaae50ac0e3c0ae8a82aad0720ab6842ce5d9785c39f","libcubeb/src/cubeb_utils.cpp":"5bd7de8bbf7bbdc3a275525edd92bad590fb90fb4d35e77017fdd5d25a5769e6","libcubeb/src/cubeb_utils.h":"27baa42747771bf9232741382b83722f5c731e5dcd4dc2e9b595aca91c5647a5","libcubeb/src/cubeb_utils_unix.h":"2a48bd2aefa1b4e4e4968121512bcaaa6be3bca6597ea390b8203c338f5c49b5","libcubeb/src/cubeb_utils_win.h":"74658b6266a8a223c681b0fd06fcc9c891c7b0b95377635c6f1763b240c2ab27","libcubeb/src/cubeb_wasapi.cpp":"1d476782be50c0944ed0ef4b24f8c64b17e315e1051941aed21b79d7bd06aeb0","libcubeb/src/cubeb_winmm.c":"3f59675847c8ff899d34898616d813b12bd3b6c925cb32fb43f6f9357d0cced5","libcubeb/src/speex/arch.h":"2300bce68c588270cdc684dc7f01377e5e251529f4545d93771e111c56d51b0f","libcubeb/src/speex/fixed_generic.h":"306ee7453677fa6067f16c79d358c6c90a9d3d008850b493cdaa59c07e6375c1","libcubeb/src/speex/resample.c":"9c3a1c64ecf3750af82c980d01ea73d3682f73c332a580465d1e787e5c54cd00","libcubeb/src/speex/resample_neon.h":"7d3fd7af9a1ddde22518b9c7b4419073b72b2dfa5be4c3bc8796992bc87b3da0","libcubeb/src/speex/resample_sse.h":"5a196d8e2d8ab5c956f5252f09f5ddc55aee1f99b1341af3fa54a1f4c2157924","libcubeb/src/speex/speex_config_types.h":"24e3ffbf29e5519611a48e5acb959645b01d166dcb4369380d5f776c3f53d4cd","libcubeb/src/speex/speex_resampler.h":"7e439ec0dd30c32216b3ced17135f8992e5aaf53389d3f5996a7d900c453e65f","libcubeb/src/speex/stack_alloc.h":"e8a2fc0874942d2c7177475fcc141fdd0c0156200b8a4e7656d4a20313e2e569","libcubeb/test/README.md":"1c11b038f87daf10ea78abc17bdbdd157940c241df548c24d5872d142a98c1af","libcubeb/test/common.h":"45eccf0f0c506f2f424149bc434180e296f85ed682b3ffca78cd53f91487d210","libcubeb/test/test_audio.cpp":"c10a9f438d8667153cde2ca13e4b2eebda22d0db93a045299fdbd8c924c44c6c","libcubeb/test/test_callback_ret.cpp":"fdcd25f6da30f2e1dba147d2a790994737d61afbaa30e0e0e9bf41dd5fa41953","libcubeb/test/test_deadlock.cpp":"c311519f30c05300715e91b529685a0c61b8e6b67161fa1f4aeb7030587d86f9","libcubeb/test/test_devices.cpp":"eec312a08667d053216a4266ef9e2b04dcdfa487cc4d34a811bb64cb33ed2937","libcubeb/test/test_duplex.cpp":"add22390fe2dbba09def4cece9a0a6a8e69b24a97f874312b931ece43b1ec4c3","libcubeb/test/test_latency.cpp":"0ace31644f499d69adcfa0aa3bad8c859ad51e97b622e2fa6d26374b8af12894","libcubeb/test/test_loopback.cpp":"e5dfcd868b25468a43dd4d8482702b9494e807db05c041b6fdcb295c59f1f01c","libcubeb/test/test_overload_callback.cpp":"8a05771e5bedfabf9f8a2e5a9266df90f5e964ead3b07782e2e435d7b69b0beb","libcubeb/test/test_record.cpp":"76d5b4f738ca7c30836ef6cc5851f3e04e396b21cf26511e0eeb7a616049fa04","libcubeb/test/test_resampler.cpp":"ca4bc0493ce0c3a5f02f389ac6e37bc2cdb9a752faad2b6fbc5af0a2223ef645","libcubeb/test/test_ring_array.cpp":"27836d716616abf8b020a710659c10ac5e1d4b64149d22cb89bd7a7a5a5669d1","libcubeb/test/test_ring_buffer.cpp":"f6e5a9f552f15808eb8ac3405559bf0ea61e7da4219cd14ac49fff3bfbf49ca7","libcubeb/test/test_sanity.cpp":"f978de12e7046518fbf848fcb5dbb2b5033c7624d5f4b59c0f3e02e7155c3884","libcubeb/test/test_tone.cpp":"3938250700c708c9c742ec8d0c9c2984f3e11860ff8dcacdf0ce785d4668f789","libcubeb/test/test_utils.cpp":"e8d7a02a9096dbc0fd15d71f9849415d52958d2ed82cbc7b8507d3228e08d382","src/callbacks.rs":"b4b4eb3f370475488d7c77b338b0bceee94ef59ede8ff41fa797a3d35ea98b5d","src/channel.rs":"1ae3c22ccc848d6d7b5d312e5a6e64b41871d5bb611d34192651356b57c253c2","src/context.rs":"96bf3442b1dd40262d3088dbb6c473f5451fd91320cef93c522b40f284599803","src/device.rs":"5b65e1c1fdd53fa5208f20bfb809475cbb3c434e02db7d0e4771d13c86f8e369","src/error.rs":"406e3b843ed2d263fe677c4b34fb96a6d780a68bcb56a6f85f041d20d70227bd","src/format.rs":"d4d27790c20eab0b16592f60d5e487425a45a268cf4c74cf843c10ac91bbff4c","src/internal.rs":"c3af5f53dc7957860bf3bc0cd9737d094fb8ac000e7b40c569304cfa76a43145","src/lib.rs":"cb49a3dd8782369172a2f8a61d5c74b4615bfb5fba3677af7d5c149e47d71815","src/log.rs":"6694178177775f2ce5449435d00609e9361c836e23119c07d04892000587dc55","src/macros.rs":"caef13f5d23f7a3ec1a54ec3ca2390ac4ad89d521893f1d0864daf70d57a20aa","src/mixer.rs":"e72e92855614da187da6419ed0a115062a05670cb73443b2ea4313d8f5108a68","src/panner.rs":"341af4b5a5331a3c1a4ab5396125a3600945e588ea33350431dfe6f1a9a0bd80","src/resampler.rs":"762070f8afde2256715b8764380cdfa1204a1a39d98a9da0b2efe88699792f2c","src/stream.rs":"ea3080b6225949938098e3ac38c42939c49a91b322b327ea66e959fe41f51763"},"package":"653b9e245d35dbe2a2da7c4586275cee75ff656ddeb02d4a73b4afdfa6d67502"}
\ No newline at end of file
--- a/third_party/rust/cubeb-sys/Cargo.toml
+++ b/third_party/rust/cubeb-sys/Cargo.toml
@@ -7,25 +7,28 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "cubeb-sys"
-version = "0.5.3"
+version = "0.5.1"
 authors = ["Dan Glastonbury <dglastonbury@mozilla.com>"]
 build = "build.rs"
 links = "cubeb"
 description = "Native bindings to the cubeb library"
 license = "ISC"
 repository = "https://github.com/djg/cubeb-rs"
 [build-dependencies.cmake]
 version = "0.1.2"
 
+[build-dependencies.gcc]
+version = "0.3"
+
 [build-dependencies.pkg-config]
 version = "0.3"
 
 [features]
 gecko-in-tree = []
 [badges.circle-ci]
 repository = "djg/cubeb-rs"
--- a/third_party/rust/cubeb-sys/build.rs
+++ b/third_party/rust/cubeb-sys/build.rs
@@ -1,14 +1,15 @@
 // Copyright © 2018 Mozilla Foundation
 //
 // This program is made available under an ISC-style license.  See the
 // accompanying file LICENSE for details.
 
 extern crate cmake;
+extern crate gcc;
 extern crate pkg_config;
 
 use std::env;
 use std::fs;
 use std::path::Path;
 use std::process::Command;
 
 macro_rules! t {
--- a/third_party/rust/cubeb-sys/src/channel.rs
+++ b/third_party/rust/cubeb-sys/src/channel.rs
@@ -1,20 +1,17 @@
 // Copyright © 2017-2018 Mozilla Foundation
 //
 // This program is made available under an ISC-style license.  See the
 // accompanying file LICENSE for details.
 
-#[cfg(windows)]
-use std::os::raw::c_int as c_enum;
-#[cfg(not(windows))]
-use std::os::raw::c_uint as c_enum;
+use std::os::raw::c_uint;
 
 cubeb_enum! {
-    pub enum cubeb_channel : c_enum {
+    pub enum cubeb_channel : c_uint {
         CHANNEL_UNKNOWN = 0,
         CHANNEL_FRONT_LEFT = 1 << 0,
         CHANNEL_FRONT_RIGHT = 1 << 1,
         CHANNEL_FRONT_CENTER = 1 << 2,
         CHANNEL_LOW_FREQUENCY = 1 << 3,
         CHANNEL_BACK_LEFT = 1 << 4,
         CHANNEL_BACK_RIGHT = 1 << 5,
         CHANNEL_FRONT_LEFT_OF_CENTER = 1 << 6,
--- a/third_party/rust/cubeb/.cargo-checksum.json
+++ b/third_party/rust/cubeb/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"a2b89828ea63243ae77d90d517d6608a98a032b3ec899151a8b35c430bae3969","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","README.md":"408c573ec240927cf5b9c036098e94e374ec41f71991415422586f450586b214","examples/common/mod.rs":"a5e1b79fc2b4addff1e442879ba3dbcb1cf5973e76b9a62d97dd0042597480db","examples/devices.rs":"89e13542853995d1ae4a49d6829156efb29dd25c6caffdf22496c28c8263ffeb","examples/tone.rs":"8f5f9851b6d99f6f16c597fcb9312e3ef81769cbfb89341d2ea2522ca2e2214e","src/context.rs":"03511fa960a411728163e700edc2fd6cfbfcf09766ffe62ee82a2cbd08fdf243","src/frame.rs":"ed1e8f4576022d0c23106bb115125e5a2967b0375a10d0c54bbe99f04a70cc3f","src/lib.rs":"98e9280890551ac9305f2f808e315b6aa6bcd5781b8e96a078787ded0ef91e2a","src/log.rs":"704faeb31934dad6bc6d02e01caa85118754209bd559d30d03fcfa5cb8c1603c","src/sample.rs":"e23be3b691052001916f920ce9c1a0051bd097e39c9d34cbcb80ab8120265f45","src/stream.rs":"3ee0432f655cd42959cd5d8e75cb4fe2322e1f88fa5d9cc83e615ae229cdeb8a"},"package":"dc64b2be0dfd32842b5ce7db6fe8c1ea8e7735ad501ca4aef5bb3b6032535cea"}
\ No newline at end of file
+{"files":{"Cargo.toml":"7c56fd36743a0c83f3977d8b24e67abff5ecd34e4e6043742ff331746165c60a","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","README.md":"408c573ec240927cf5b9c036098e94e374ec41f71991415422586f450586b214","examples/common/mod.rs":"a5e1b79fc2b4addff1e442879ba3dbcb1cf5973e76b9a62d97dd0042597480db","examples/devices.rs":"89e13542853995d1ae4a49d6829156efb29dd25c6caffdf22496c28c8263ffeb","examples/tone.rs":"8f5f9851b6d99f6f16c597fcb9312e3ef81769cbfb89341d2ea2522ca2e2214e","src/context.rs":"03511fa960a411728163e700edc2fd6cfbfcf09766ffe62ee82a2cbd08fdf243","src/frame.rs":"ed1e8f4576022d0c23106bb115125e5a2967b0375a10d0c54bbe99f04a70cc3f","src/lib.rs":"98e9280890551ac9305f2f808e315b6aa6bcd5781b8e96a078787ded0ef91e2a","src/log.rs":"704faeb31934dad6bc6d02e01caa85118754209bd559d30d03fcfa5cb8c1603c","src/sample.rs":"e23be3b691052001916f920ce9c1a0051bd097e39c9d34cbcb80ab8120265f45","src/stream.rs":"3ee0432f655cd42959cd5d8e75cb4fe2322e1f88fa5d9cc83e615ae229cdeb8a"},"package":"8a3502aafa1bf95c524f65d2ba46d8741700c6a8a9543ea52c6da3d8b69a2896"}
\ No newline at end of file
--- a/third_party/rust/cubeb/Cargo.toml
+++ b/third_party/rust/cubeb/Cargo.toml
@@ -7,24 +7,24 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "cubeb"
-version = "0.5.3"
+version = "0.5.2"
 authors = ["Dan Glastonbury <dglastonbury@mozilla.com>"]
 description = "Bindings to libcubeb for interacting with system audio from rust.\n"
 homepage = "https://github.com/djg/cubeb-rs"
 readme = "README.md"
 keywords = ["cubeb"]
 categories = ["api-bindings"]
 license = "ISC"
 repository = "https://github.com/djg/cubeb-rs"
 [dependencies.cubeb-core]
-version = "0.5.3"
+version = "0.5.1"
 
 [features]
 gecko-in-tree = ["cubeb-core/gecko-in-tree"]
 [badges.circle-ci]
 repository = "djg/cubeb-rs"
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/.cargo-checksum.json
+++ /dev/null
@@ -1,1 +0,0 @@
-{"files":{"Cargo.toml":"d0a5c57e548259b2ef7d6e443f72a91775cfd20b926ccd88d7505ce24400faa1","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"76068a8cb49c12b1f45599fe8ed1ed53554485afe1cc5302360cc73687458a1a","appveyor.yml":"0bd9b8e5a94a36972b37227cc59984fc6ec01b4ee4b617ef20d0e3acd19f44b1","src/from_raw_arc.rs":"c2cee14a0355256beb55a1feb54ccdcc50c8ab2d9abb3b7f114be00ed8a5583f","src/lib.rs":"1eaafb6635a525abfea3eefdeba831e3bae2f80dda847f8a7102f26f32cbddad","tests/smoke.rs":"b1bd2ecbaae2a6458fdc2c50b8b1607277108196b607c12f47f4c5c78b9a250e"},"package":"82f43a815b57d2d652550f3d20cec88a495bb2d0956aa873dc43040278455677"}
\ No newline at end of file
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/Cargo.toml
+++ /dev/null
@@ -1,23 +0,0 @@
-[package]
-name = "mio-named-pipes"
-version = "0.1.5"
-authors = ["Alex Crichton <alex@alexcrichton.com>"]
-license = "MIT/Apache-2.0"
-readme = "README.md"
-repository = "https://github.com/alexcrichton/mio-named-pipes"
-homepage = "https://github.com/alexcrichton/mio-named-pipes"
-documentation = "https://docs.rs/mio-named-pipes/0.1/x86_64-pc-windows-msvc/mio_named_pipes/"
-description = """
-Windows named pipe bindings for mio.
-"""
-
-[target.'cfg(windows)'.dependencies]
-kernel32-sys = "0.2"
-log = "0.3"
-mio = "0.6.5"
-miow = "0.2"
-winapi = "0.2"
-
-[dev-dependencies]
-env_logger = { version = "0.3", default-features = false }
-rand = "0.3"
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/LICENSE-APACHE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-	http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/LICENSE-MIT
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2014 Alex Crichton
-
-Permission is hereby granted, free of charge, to any
-person obtaining a copy of this software and associated
-documentation files (the "Software"), to deal in the
-Software without restriction, including without
-limitation the rights to use, copy, modify, merge,
-publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software
-is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice
-shall be included in all copies or substantial portions
-of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# mio-named-pipes
-
-[![Build status](https://ci.appveyor.com/api/projects/status/y0ct01srewnhhesn?svg=true)](https://ci.appveyor.com/project/alexcrichton/mio-named-pipes)
-
-[Documentation](https://docs.rs/mio-named-pipes/0.1/x86_64-pc-windows-msvc/mio_named_pipes/)
-
-A library for integrating Windows [Named Pipes] with [mio].
-
-[Named Pipes]: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365590(v=vs.85).aspx
-[mio]: https://github.com/carllerche/mio
-
-```toml
-# Cargo.toml
-[dependencies]
-mio-named-pipes = "0.6"
-mio = "0.6"
-```
-
-## Usage
-
-The primary type, `NamedPipe`, can be constructed with `NamedPipe::new` or
-through the `IntoRawHandle` type. All operations on `NamedPipe` are nonblocking
-and will return an I/O error if they'd block (with the error indicating so).
-
-Typically you can use a `NamedPipe` in the same way you would a TCP socket on
-Windows with mio.
-
-> **Note**: Named pipes on Windows do not have a zero-cost abstraction when
-> working with the mio interface (readiness, not completion). As a result, this
-> library internally has some buffer management that hasn't been optimized yet.
-> It's recommended you benchmark this library for your application, and feel
-> free to contact me if anything looks awry.
-
-# License
-
-`mio-named-pipes` is primarily distributed under the terms of both the MIT
-license and the Apache License (Version 2.0), with portions covered by various
-BSD-like licenses.
-
-See LICENSE-APACHE, and LICENSE-MIT for details.
-
-
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/appveyor.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-environment:
-  matrix:
-  - TARGET: x86_64-pc-windows-msvc
-  GH_TOKEN:
-    secure: nHB4fVo+y/Aak+L0nYfrT8Rcs8OfUNm0F2xcIVFVYJ9ehf0CzvCmSMUvWguM0kKp
-
-install:
-  - curl -sSf -o rustup-init.exe https://win.rustup.rs/
-  - rustup-init.exe -y --default-host %TARGET%
-  - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin;C:\MinGW\bin
-
-  - rustc -vV
-  - cargo -vV
-
-build: false
-
-test_script:
-  - cargo test
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/src/from_raw_arc.rs
+++ /dev/null
@@ -1,116 +0,0 @@
-//! A "Manual Arc" which allows manually frobbing the reference count
-//!
-//! This module contains a copy of the `Arc` found in the standard library,
-//! stripped down to the bare bones of what we actually need. The reason this is
-//! done is for the ability to concretely know the memory layout of the `Inner`
-//! structure of the arc pointer itself (e.g. `ArcInner` in the standard
-//! library).
-//!
-//! We do some unsafe casting from `*mut OVERLAPPED` to a `FromRawArc<T>` to
-//! ensure that data lives for the length of an I/O operation, but this means
-//! that we have to know the layouts of the structures involved. This
-//! representation primarily guarantees that the data, `T` is at the front of
-//! the inner pointer always.
-//!
-//! Note that we're missing out on some various optimizations implemented in the
-//! standard library:
-//!
-//! * The size of `FromRawArc` is actually two words because of the drop flag
-//! * The compiler doesn't understand that the pointer in `FromRawArc` is never
-//!   null, so Option<FromRawArc<T>> is not a nullable pointer.
-
-use std::ops::Deref;
-use std::mem;
-use std::sync::atomic::{self, AtomicUsize, Ordering};
-
-pub struct FromRawArc<T> {
-    _inner: *mut Inner<T>,
-}
-
-unsafe impl<T: Sync + Send> Send for FromRawArc<T> { }
-unsafe impl<T: Sync + Send> Sync for FromRawArc<T> { }
-
-#[repr(C)]
-struct Inner<T> {
-    data: T,
-    cnt: AtomicUsize,
-}
-
-impl<T> FromRawArc<T> {
-    pub fn new(data: T) -> FromRawArc<T> {
-        let x = Box::new(Inner {
-            data: data,
-            cnt: AtomicUsize::new(1),
-        });
-        FromRawArc { _inner: unsafe { mem::transmute(x) } }
-    }
-
-    pub unsafe fn from_raw(ptr: *mut T) -> FromRawArc<T> {
-        // Note that if we could use `mem::transmute` here to get a libstd Arc
-        // (guaranteed) then we could just use std::sync::Arc, but this is the
-        // crucial reason this currently exists.
-        FromRawArc { _inner: ptr as *mut Inner<T> }
-    }
-}
-
-impl<T> Clone for FromRawArc<T> {
-    fn clone(&self) -> FromRawArc<T> {
-        // Atomic ordering of Relaxed lifted from libstd, but the general idea
-        // is that you need synchronization to communicate this increment to
-        // another thread, so this itself doesn't need to be synchronized.
-        unsafe {
-            (*self._inner).cnt.fetch_add(1, Ordering::Relaxed);
-        }
-        FromRawArc { _inner: self._inner }
-    }
-}
-
-impl<T> Deref for FromRawArc<T> {
-    type Target = T;
-
-    fn deref(&self) -> &T {
-        unsafe { &(*self._inner).data }
-    }
-}
-
-impl<T> Drop for FromRawArc<T> {
-    fn drop(&mut self) {
-        unsafe {
-            // Atomic orderings lifted from the standard library
-            if (*self._inner).cnt.fetch_sub(1, Ordering::Release) != 1 {
-                return
-            }
-            atomic::fence(Ordering::Acquire);
-            drop(mem::transmute::<_, Box<T>>(self._inner));
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::FromRawArc;
-
-    #[test]
-    fn smoke() {
-        let a = FromRawArc::new(1);
-        assert_eq!(*a, 1);
-        assert_eq!(*a.clone(), 1);
-    }
-
-    #[test]
-    fn drops() {
-        struct A<'a>(&'a mut bool);
-        impl<'a> Drop for A<'a> {
-            fn drop(&mut self) {
-                *self.0 = true;
-            }
-        }
-        let mut a = false;
-        {
-            let a = FromRawArc::new(A(&mut a));
-            a.clone();
-            assert!(!*a.0);
-        }
-        assert!(a);
-    }
-}
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/src/lib.rs
+++ /dev/null
@@ -1,681 +0,0 @@
-//! Windows named pipes bindings for mio.
-//!
-//! This crate implements bindings for named pipes for the mio crate. This
-//! crate compiles on all platforms but only contains anything on Windows.
-//! Currently this crate requires mio 0.6.2.
-//!
-//! On Windows, mio is implemented with an IOCP object at the heart of its
-//! `Poll` implementation. For named pipes, this means that all I/O is done in
-//! an overlapped fashion and the named pipes themselves are registered with
-//! mio's internal IOCP object. Essentially, this crate is using IOCP for
-//! bindings with named pipes.
-//!
-//! Note, though, that IOCP is a *completion* based model whereas mio expects a
-//! *readiness* based model. As a result this crate, like with TCP objects in
-//! mio, has internal buffering to translate the completion model to a readiness
-//! model. This means that this crate is not a zero-cost binding over named
-//! pipes on Windows, but rather approximates the performance of mio's TCP
-//! implementation on Windows.
-//!
-//! # Trait implementations
-//!
-//! The `Read` and `Write` traits are implemented for `NamedPipe` and for
-//! `&NamedPipe`. This represents that a named pipe can be concurrently read and
-//! written to and also can be read and written to at all. Typically a named
-//! pipe needs to be connected to a client before it can be read or written,
-//! however.
-//!
-//! Note that for I/O operations on a named pipe to succeed then the named pipe
-//! needs to be associated with an event loop. Until this happens all I/O
-//! operations will return a "would block" error.
-//!
-//! # Managing connections
-//!
-//! The `NamedPipe` type supports a `connect` method to connect to a client and
-//! a `disconnect` method to disconnect from that client. These two methods only
-//! work once a named pipe is associated with an event loop.
-//!
-//! The `connect` method will succeed asynchronously and a completion can be
-//! detected once the object receives a writable notification.
-//!
-//! # Named pipe clients
-//!
-//! Currently to create a client of a named pipe server then you can use the
-//! `OpenOptions` type in the standard library to create a `File` that connects
-//! to a named pipe. Afterwards you can use the `into_raw_handle` method coupled
-//! with the `NamedPipe::from_raw_handle` method to convert that to a named pipe
-//! that can operate asynchronously. Don't forget to pass the
-//! `FILE_FLAG_OVERLAPPED` flag when opening the `File`.
-
-#![cfg(windows)]
-#![deny(missing_docs)]
-
-extern crate kernel32;
-#[macro_use]
-extern crate log;
-extern crate mio;
-extern crate miow;
-extern crate winapi;
-
-use std::ffi::OsStr;
-use std::fmt;
-use std::io::prelude::*;
-use std::io;
-use std::mem;
-use std::os::windows::io::*;
-use std::slice;
-use std::sync::Mutex;
-use std::sync::atomic::AtomicBool;
-use std::sync::atomic::Ordering::SeqCst;
-
-use mio::windows;
-use mio::{Registration, Poll, Token, PollOpt, Ready, Evented, SetReadiness};
-use miow::iocp::CompletionStatus;
-use miow::pipe;
-use winapi::{ERROR_PIPE_LISTENING, OVERLAPPED_ENTRY, ERROR_BROKEN_PIPE};
-
-mod from_raw_arc;
-use from_raw_arc::FromRawArc;
-
-macro_rules! offset_of {
-    ($t:ty, $($field:ident).+) => (
-        &(*(0 as *const $t)).$($field).+ as *const _ as usize
-    )
-}
-
-macro_rules! overlapped2arc {
-    ($e:expr, $t:ty, $($field:ident).+) => ({
-        let offset = offset_of!($t, $($field).+);
-        debug_assert!(offset < mem::size_of::<$t>());
-        FromRawArc::from_raw(($e as usize - offset) as *mut $t)
-    })
-}
-
-fn would_block() -> io::Error {
-    io::Error::new(io::ErrorKind::WouldBlock, "would block")
-}
-
-/// Representation of a named pipe on Windows.
-///
-/// This structure internally contains a `HANDLE` which represents the named
-/// pipe, and also maintains state associated with the mio event loop and active
-/// I/O operations that have been scheduled to translate IOCP to a readiness
-/// model.
-pub struct NamedPipe {
-    registered: AtomicBool,
-    ready_registration: Registration,
-    poll_registration: windows::Binding,
-    inner: FromRawArc<Inner>,
-}
-
-struct Inner {
-    handle: pipe::NamedPipe,
-    readiness: SetReadiness,
-
-    connect: windows::Overlapped,
-    connecting: AtomicBool,
-
-    read: windows::Overlapped,
-    write: windows::Overlapped,
-
-    io: Mutex<Io>,
-}
-
-struct Io {
-    read: State,
-    write: State,
-    connect_error: Option<io::Error>,
-}
-
-enum State {
-    None,
-    Pending(Vec<u8>, usize),
-    Ok(Vec<u8>, usize),
-    Err(io::Error),
-}
-
-fn _assert_kinds() {
-    fn _assert_send<T: Send>() {}
-    fn _assert_sync<T: Sync>() {}
-    _assert_send::<NamedPipe>();
-    _assert_sync::<NamedPipe>();
-}
-
-impl NamedPipe {
-    /// Creates a new named pipe at the specified `addr` given a "reasonable
-    /// set" of initial configuration options.
-    ///
-    /// Currently the configuration options are the [same as miow]. To change
-    /// these options, you can create a custom named pipe yourself and then use
-    /// the `FromRawHandle` constructor to convert that type to an instance of a
-    /// `NamedPipe` in this crate.
-    ///
-    /// [same as miow]: https://docs.rs/miow/0.1.4/x86_64-pc-windows-msvc/miow/pipe/struct.NamedPipe.html#method.new
-    pub fn new<A: AsRef<OsStr>>(addr: A) -> io::Result<NamedPipe> {
-        NamedPipe::_new(addr.as_ref())
-    }
-
-    fn _new(addr: &OsStr) -> io::Result<NamedPipe> {
-        let pipe = try!(pipe::NamedPipe::new(addr));
-        unsafe {
-            Ok(NamedPipe::from_raw_handle(pipe.into_raw_handle()))
-        }
-    }
-
-    /// Attempts to call `ConnectNamedPipe`, if possible.
-    ///
-    /// This function will attempt to connect this pipe to a client in an
-    /// asynchronous fashion. If the function immediately establishes a
-    /// connection to a client then `Ok(())` is returned. Otherwise if a
-    /// connection attempt was issued and is now in progress then a "would
-    /// block" error is returned.
-    ///
-    /// When the connection is finished then this object will be flagged as
-    /// being ready for a write, or otherwise in the writable state.
-    ///
-    /// # Errors
-    ///
-    /// This function will return a "would block" error if the pipe has not yet
-    /// been registered with an event loop, if the connection operation has
-    /// previously been issued but has not yet completed, or if the connect
-    /// itself was issued and didn't finish immediately.
-    ///
-    /// Normal I/O errors from the call to `ConnectNamedPipe` are returned
-    /// immediately.
-    pub fn connect(&self) -> io::Result<()> {
-        // Make sure we're associated with an IOCP object
-        if !self.registered() {
-            return Err(would_block())
-        }
-
-        // "Acquire the connecting lock" or otherwise just make sure we're the
-        // only operation that's using the `connect` overlapped instance.
-        if self.inner.connecting.swap(true, SeqCst) {
-            return Err(would_block())
-        }
-
-        // Now that we've flagged ourselves in the connecting state, issue the
-        // connection attempt. Afterwards interpret the return value and set
-        // internal state accordingly.
-        let res = unsafe {
-            let overlapped = self.inner.connect.as_mut_ptr();
-            self.inner.handle.connect_overlapped(overlapped)
-        };
-
-        match res {
-            // The connection operation finished immediately, so let's schedule
-            // reads/writes and such.
-            Ok(true) => {
-                trace!("connect done immediately");
-                self.inner.connecting.store(false, SeqCst);
-                Inner::post_register(&self.inner);
-                Ok(())
-            }
-
-            // If the overlapped operation was successful and didn't finish
-            // immediately then we forget a copy of the arc we hold
-            // internally. This ensures that when the completion status comes
-            // in for the I/O operation finishing it'll have a reference
-            // associated with it and our data will still be valid. The
-            // `connect_done` function will "reify" this forgotten pointer to
-            // drop the refcount on the other side.
-            Ok(false) => {
-                trace!("connect in progress");
-                mem::forget(self.inner.clone());
-                Err(would_block())
-            }
-
-            // TODO: are we sure no IOCP notification comes in here?
-            Err(e) => {
-                trace!("connect error: {}", e);
-                self.inner.connecting.store(false, SeqCst);
-                Err(e)
-            }
-        }
-    }
-
-    /// Takes any internal error that has happened after the last I/O operation
-    /// which hasn't been retrieved yet.
-    ///
-    /// This is particularly useful when detecting failed attempts to `connect`.
-    /// After a completed `connect` flags this pipe as writable then callers
-    /// must invoke this method to determine whether the connection actually
-    /// succeeded. If this function returns `None` then a client is connected,
-    /// otherwise it returns an error of what happened and a client shouldn't be
-    /// connected.
-    pub fn take_error(&self) -> io::Result<Option<io::Error>> {
-        Ok(self.inner.io.lock().unwrap().connect_error.take())
-    }
-
-    /// Disconnects this named pipe from a connected client.
-    ///
-    /// This function will disconnect the pipe from a connected client, if any,
-    /// transitively calling the `DisconnectNamedPipe` function. If the
-    /// disconnection is successful then this object will no longer be readable
-    /// or writable.
-    ///
-    /// After a `disconnect` is issued, then a `connect` may be called again to
-    /// connect to another client.
-    pub fn disconnect(&self) -> io::Result<()> {
-        try!(self.inner.handle.disconnect());
-        self.inner.readiness.set_readiness(Ready::empty())
-                 .expect("event loop seems gone");
-        Ok(())
-    }
-
-    fn registered(&self) -> bool {
-        self.registered.load(SeqCst)
-    }
-}
-
-impl Read for NamedPipe {
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        <&NamedPipe as Read>::read(&mut &*self, buf)
-    }
-}
-
-impl Write for NamedPipe {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        <&NamedPipe as Write>::write(&mut &*self, buf)
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        <&NamedPipe as Write>::flush(&mut &*self)
-    }
-}
-
-impl<'a> Read for &'a NamedPipe {
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        // Make sure we're registered
-        if !self.registered() {
-            return Err(would_block())
-        }
-
-        let mut state = self.inner.io.lock().unwrap();
-        match mem::replace(&mut state.read, State::None) {
-            // In theory not possible with `ready_registration` checked above,
-            // but return would block for now.
-            State::None => Err(would_block()),
-
-            // A read is in flight, still waiting for it to finish
-            State::Pending(buf, amt) => {
-                state.read = State::Pending(buf, amt);
-                Err(would_block())
-            }
-
-            // We previously read something into `data`, try to copy out some
-            // data. If we copy out all the data schedule a new read and
-            // otherwise store the buffer to get read later.
-            State::Ok(data, cur) => {
-                let n = {
-                    let mut remaining = &data[cur..];
-                    try!(remaining.read(buf))
-                };
-                let next = cur + n;
-                if next != data.len() {
-                    state.read = State::Ok(data, next);
-                } else {
-                    Inner::schedule_read(&self.inner, &mut state);
-                }
-                Ok(n)
-            }
-
-            // Looks like an in-flight read hit an error, return that here while
-            // we schedule a new one.
-            State::Err(e) => {
-                Inner::schedule_read(&self.inner, &mut state);
-                if e.raw_os_error() == Some(ERROR_BROKEN_PIPE as i32) {
-                    Ok(0)
-                } else {
-                    Err(e)
-                }
-            }
-        }
-    }
-}
-
-impl<'a> Write for &'a NamedPipe {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        // Make sure we're registered
-        if !self.registered() {
-            return Err(would_block())
-        }
-
-        // Make sure there's no writes pending
-        let mut io = self.inner.io.lock().unwrap();
-        match io.write {
-            State::None => {}
-            _ => return Err(would_block())
-        }
-
-        // Move `buf` onto the heap and fire off the write
-        //
-        // TODO: need to be smarter about buffer management here
-        Inner::schedule_write(&self.inner, buf.to_vec(), 0, &mut io);
-        Ok(buf.len())
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        // TODO: `FlushFileBuffers` somehow?
-        Ok(())
-    }
-}
-
-impl Evented for NamedPipe {
-    fn register(&self,
-                poll: &Poll,
-                token: Token,
-                interest: Ready,
-                opts: PollOpt) -> io::Result<()> {
-        // First, register the handle with the event loop
-        unsafe {
-            try!(self.poll_registration.register_handle(&self.inner.handle,
-                                                        token,
-                                                        poll));
-        }
-        try!(poll.register(&self.ready_registration, token, interest, opts));
-        self.registered.store(true, SeqCst);
-        Inner::post_register(&self.inner);
-        Ok(())
-    }
-
-    fn reregister(&self,
-                  poll: &Poll,
-                  token: Token,
-                  interest: Ready,
-                  opts: PollOpt) -> io::Result<()> {
-        // Validate `Poll` and that we were previously registered
-        unsafe {
-            try!(self.poll_registration.reregister_handle(&self.inner.handle,
-                                                          token,
-                                                          poll));
-        }
-
-        // At this point we should for sure have `ready_registration` unless
-        // we're racing with `register` above, so just return a bland error if
-        // the borrow fails.
-        try!(poll.reregister(&self.ready_registration, token, interest, opts));
-
-        Inner::post_register(&self.inner);
-
-        Ok(())
-    }
-
-    fn deregister(&self, poll: &Poll) -> io::Result<()> {
-        // Validate `Poll` and deregister ourselves
-        unsafe {
-            try!(self.poll_registration.deregister_handle(&self.inner.handle, poll));
-        }
-        poll.deregister(&self.ready_registration)
-    }
-}
-
-impl AsRawHandle for NamedPipe {
-    fn as_raw_handle(&self) -> RawHandle {
-        self.inner.handle.as_raw_handle()
-    }
-}
-
-impl FromRawHandle for NamedPipe {
-    unsafe fn from_raw_handle(handle: RawHandle) -> NamedPipe {
-        let (r, s) = Registration::new2();
-        NamedPipe {
-            registered: AtomicBool::new(false),
-            ready_registration: r,
-            poll_registration: windows::Binding::new(),
-            inner: FromRawArc::new(Inner {
-                handle: pipe::NamedPipe::from_raw_handle(handle),
-                readiness: s,
-                connect: windows::Overlapped::new(connect_done),
-                connecting: AtomicBool::new(false),
-                read: windows::Overlapped::new(read_done),
-                write: windows::Overlapped::new(write_done),
-                io: Mutex::new(Io {
-                    read: State::None,
-                    write: State::None,
-                    connect_error: None,
-                }),
-            }),
-        }
-    }
-}
-
-impl fmt::Debug for NamedPipe {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        self.inner.handle.fmt(f)
-    }
-}
-
-impl Drop for NamedPipe {
-    fn drop(&mut self) {
-        // Cancel pending reads/connects, but don't cancel writes to ensure that
-        // everything is flushed out.
-        unsafe {
-            if self.inner.connecting.load(SeqCst) {
-                drop(cancel(&self.inner.handle, &self.inner.connect));
-            }
-            let io = self.inner.io.lock().unwrap();
-            match io.read {
-                State::Pending(..) => {
-                    drop(cancel(&self.inner.handle, &self.inner.read));
-                }
-                _ => {}
-            }
-        }
-    }
-}
-
-impl Inner {
-    /// Schedules a read to happen in the background, executing an overlapped
-    /// operation.
-    ///
-    /// This function returns `true` if a normal error happens or if the read
-    /// is scheduled in the background. If the pipe is no longer connected
-    /// (ERROR_PIPE_LISTENING) then `false` is returned and no read is
-    /// scheduled.
-    fn schedule_read(me: &FromRawArc<Inner>, io: &mut Io) -> bool {
-        // Check to see if a read is already scheduled/completed
-        match io.read {
-            State::None => {}
-            _ => return true,
-        }
-
-        // Turn off our read readiness
-        let ready = me.readiness.readiness();
-        me.readiness.set_readiness(ready & !Ready::readable())
-                    .expect("event loop seems gone");
-
-        // Allocate a buffer and schedule the read.
-        //
-        // TODO: need to be smarter about buffer management here
-        let mut buf = Vec::with_capacity(8 * 1024);
-        let e = unsafe {
-            let overlapped = me.read.as_mut_ptr();
-            let slice = slice::from_raw_parts_mut(buf.as_mut_ptr(),
-                                                  buf.capacity());
-            me.handle.read_overlapped(slice, overlapped)
-        };
-
-        match e {
-            // See `connect` above for the rationale behind `forget`
-            Ok(e) => {
-                trace!("schedule read success: {:?}", e);
-                io.read = State::Pending(buf, 0); // 0 is ignored on read side
-                mem::forget(me.clone());
-                true
-            }
-
-            // If ERROR_PIPE_LISTENING happens then it's not a real read error,
-            // we just need to wait for a connect.
-            Err(ref e) if e.raw_os_error() == Some(ERROR_PIPE_LISTENING as i32) => {
-                false
-            }
-
-            // If some other error happened, though, we're now readable to give
-            // out the error.
-            Err(e) => {
-                trace!("schedule read error: {}", e);
-                io.read = State::Err(e);
-                me.readiness.set_readiness(ready | Ready::readable())
-                            .expect("event loop still seems gone");
-                true
-            }
-        }
-    }
-
-    fn schedule_write(me: &FromRawArc<Inner>,
-                      buf: Vec<u8>,
-                      pos: usize,
-                      io: &mut Io) {
-        // Very similar to `schedule_read` above, just done for the write half.
-        let ready = me.readiness.readiness();
-        me.readiness.set_readiness(ready & !Ready::writable())
-                    .expect("event loop seems gone");
-
-        let e = unsafe {
-            let overlapped = me.write.as_mut_ptr();
-            me.handle.write_overlapped(&buf[pos..], overlapped)
-        };
-
-        match e {
-            // See `connect` above for the rationale behind `forget`
-            Ok(e) => {
-                trace!("schedule write success: {:?}", e);
-                io.write = State::Pending(buf, pos);
-                mem::forget(me.clone())
-            }
-            Err(e) => {
-                trace!("schedule write error: {}", e);
-                io.write = State::Err(e);
-                me.add_readiness(Ready::writable());
-            }
-        }
-    }
-
-    fn add_readiness(&self, ready: Ready) {
-        self.readiness.set_readiness(ready | self.readiness.readiness())
-                      .expect("event loop still seems gone");
-    }
-
-    fn post_register(me: &FromRawArc<Inner>) {
-        let mut io = me.io.lock().unwrap();
-        if Inner::schedule_read(&me, &mut io) {
-            if let State::None = io.write {
-                me.add_readiness(Ready::writable());
-            }
-        }
-    }
-}
-
-unsafe fn cancel(handle: &AsRawHandle,
-                 overlapped: &windows::Overlapped) -> io::Result<()> {
-    let ret = kernel32::CancelIoEx(handle.as_raw_handle(),
-                                   overlapped.as_mut_ptr());
-    if ret == 0 {
-        Err(io::Error::last_os_error())
-    } else {
-        Ok(())
-    }
-}
-
-fn connect_done(status: &OVERLAPPED_ENTRY) {
-    let status = CompletionStatus::from_entry(status);
-    trace!("connect done");
-
-    // Acquire the `FromRawArc<Inner>`. Note that we should be guaranteed that
-    // the refcount is available to us due to the `mem::forget` in
-    // `connect` above.
-    let me = unsafe {
-        overlapped2arc!(status.overlapped(), Inner, connect)
-    };
-
-    // Flag ourselves as no longer using the `connect` overlapped instances.
-    let prev = me.connecting.swap(false, SeqCst);
-    assert!(prev, "wasn't previously connecting");
-
-    // Stash away our connect error if one happened
-    debug_assert_eq!(status.bytes_transferred(), 0);
-    unsafe {
-        match me.handle.result(status.overlapped()) {
-            Ok(n) => debug_assert_eq!(n, 0),
-            Err(e) => me.io.lock().unwrap().connect_error = Some(e),
-        }
-    }
-
-    // We essentially just finished a registration, so kick off a
-    // read and register write readiness.
-    Inner::post_register(&me);
-}
-
-fn read_done(status: &OVERLAPPED_ENTRY) {
-    let status = CompletionStatus::from_entry(status);
-    trace!("read finished, bytes={}", status.bytes_transferred());
-
-    // Acquire the `FromRawArc<Inner>`. Note that we should be guaranteed that
-    // the refcount is available to us due to the `mem::forget` in
-    // `schedule_read` above.
-    let me = unsafe {
-        overlapped2arc!(status.overlapped(), Inner, read)
-    };
-
-    // Move from the `Pending` to `Ok` state.
-    let mut io = me.io.lock().unwrap();
-    let mut buf = match mem::replace(&mut io.read, State::None) {
-        State::Pending(buf, _) => buf,
-        _ => unreachable!(),
-    };
-    unsafe {
-        match me.handle.result(status.overlapped()) {
-            Ok(n) => {
-                debug_assert_eq!(status.bytes_transferred() as usize, n);
-                buf.set_len(status.bytes_transferred() as usize);
-                io.read = State::Ok(buf, 0);
-            }
-            Err(e) => {
-                debug_assert_eq!(status.bytes_transferred(), 0);
-                io.read = State::Err(e);
-            }
-        }
-    }
-
-    // Flag our readiness that we've got data.
-    me.add_readiness(Ready::readable());
-}
-
-fn write_done(status: &OVERLAPPED_ENTRY) {
-    let status = CompletionStatus::from_entry(status);
-    trace!("write finished, bytes={}", status.bytes_transferred());
-    // Acquire the `FromRawArc<Inner>`. Note that we should be guaranteed that
-    // the refcount is available to us due to the `mem::forget` in
-    // `schedule_write` above.
-    let me = unsafe {
-        overlapped2arc!(status.overlapped(), Inner, write)
-    };
-
-    // Make the state change out of `Pending`. If we wrote the entire buffer
-    // then we're writable again and otherwise we schedule another write.
-    let mut io = me.io.lock().unwrap();
-    let (buf, pos) = match mem::replace(&mut io.write, State::None) {
-        State::Pending(buf, pos) => (buf, pos),
-        _ => unreachable!(),
-    };
-
-    unsafe {
-        match me.handle.result(status.overlapped()) {
-            Ok(n) => {
-                debug_assert_eq!(status.bytes_transferred() as usize, n);
-                let new_pos = pos + (status.bytes_transferred() as usize);
-                if new_pos == buf.len() {
-                    me.add_readiness(Ready::writable());
-                } else {
-                    Inner::schedule_write(&me, buf, new_pos, &mut io);
-                }
-            }
-            Err(e) => {
-                debug_assert_eq!(status.bytes_transferred(), 0);
-                io.write = State::Err(e);
-                me.add_readiness(Ready::writable());
-            }
-        }
-    }
-}
deleted file mode 100644
--- a/third_party/rust/mio-named-pipes/tests/smoke.rs
+++ /dev/null
@@ -1,273 +0,0 @@
-extern crate mio;
-extern crate mio_named_pipes;
-extern crate env_logger;
-extern crate rand;
-extern crate winapi;
-
-#[macro_use]
-extern crate log;
-
-use std::fs::OpenOptions;
-use std::io::prelude::*;
-use std::io;
-use std::os::windows::fs::*;
-use std::os::windows::io::*;
-use std::time::Duration;
-
-use mio_named_pipes::NamedPipe;
-use mio::{Poll, Ready, Token, PollOpt, Events};
-use rand::Rng;
-
-macro_rules! t {
-    ($e:expr) => (match $e {
-        Ok(e) => e,
-        Err(e) => panic!("{} failed with {}", stringify!($e), e),
-    })
-}
-
-fn server() -> (NamedPipe, String) {
-    let num: u64 = rand::thread_rng().gen();
-    let name = format!(r"\\.\pipe\my-pipe-{}", num);
-    let pipe = t!(NamedPipe::new(&name));
-    (pipe, name)
-}
-
-fn client(name: &str) -> NamedPipe {
-    let mut opts = OpenOptions::new();
-    opts.read(true)
-        .write(true)
-        .custom_flags(winapi::FILE_FLAG_OVERLAPPED);
-    let file = t!(opts.open(name));
-    unsafe {
-        NamedPipe::from_raw_handle(file.into_raw_handle())
-    }
-}
-
-fn pipe() -> (NamedPipe, NamedPipe) {
-    let (pipe, name) = server();
-    (pipe, client(&name))
-}
-
-#[test]
-fn writable_after_register() {
-    drop(env_logger::init());
-
-    let (server, client) = pipe();
-    let poll = t!(Poll::new());
-    t!(poll.register(&server,
-                     Token(0),
-                     Ready::writable() | Ready::readable(),
-                     PollOpt::edge()));
-    t!(poll.register(&client,
-                     Token(1),
-                     Ready::writable(),
-                     PollOpt::edge()));
-
-    let mut events = Events::with_capacity(128);
-    t!(poll.poll(&mut events, None));
-
-    let events = events.iter().collect::<Vec<_>>();
-    debug!("events {:?}", events);
-    assert!(events.iter().any(|e| {
-        e.token() == Token(0) && e.readiness() == Ready::writable()
-    }));
-    assert!(events.iter().any(|e| {
-        e.token() == Token(1) && e.readiness() == Ready::writable()
-    }));
-}
-
-#[test]
-fn write_then_read() {
-    drop(env_logger::init());
-
-    let (mut server, mut client) = pipe();
-    let poll = t!(Poll::new());
-    t!(poll.register(&server,
-                     Token(0),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-    t!(poll.register(&client,
-                     Token(1),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-
-    let mut events = Events::with_capacity(128);
-    t!(poll.poll(&mut events, None));
-
-    assert_eq!(t!(client.write(b"1234")), 4);
-
-    loop {
-        t!(poll.poll(&mut events, None));
-        let events = events.iter().collect::<Vec<_>>();
-        debug!("events {:?}", events);
-        if let Some(event) = events.iter().find(|e| e.token() == Token(0)) {
-            if event.readiness().is_readable() {
-                break
-            }
-        }
-    }
-
-    let mut buf = [0; 10];
-    assert_eq!(t!(server.read(&mut buf)), 4);
-    assert_eq!(&buf[..4], b"1234");
-}
-
-#[test]
-fn connect_before_client() {
-    drop(env_logger::init());
-
-    let (server, name) = server();
-    let poll = t!(Poll::new());
-    t!(poll.register(&server,
-                     Token(0),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-
-    let mut events = Events::with_capacity(128);
-    t!(poll.poll(&mut events, Some(Duration::new(0, 0))));
-    let e = events.iter().collect::<Vec<_>>();
-    debug!("events {:?}", e);
-    assert_eq!(e.len(), 0);
-    assert_eq!(server.connect().err().unwrap().kind(),
-               io::ErrorKind::WouldBlock);
-
-    let client = client(&name);
-    t!(poll.register(&client,
-                     Token(1),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-    loop {
-        t!(poll.poll(&mut events, None));
-        let e = events.iter().collect::<Vec<_>>();
-        debug!("events {:?}", e);
-        if let Some(event) = e.iter().find(|e| e.token() == Token(0)) {
-            if event.readiness().is_writable() {
-                break
-            }
-        }
-    }
-}
-
-#[test]
-fn connect_after_client() {
-    drop(env_logger::init());
-
-    let (server, name) = server();
-    let poll = t!(Poll::new());
-    t!(poll.register(&server,
-                     Token(0),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-
-    let mut events = Events::with_capacity(128);
-    t!(poll.poll(&mut events, Some(Duration::new(0, 0))));
-    let e = events.iter().collect::<Vec<_>>();
-    debug!("events {:?}", e);
-    assert_eq!(e.len(), 0);
-
-    let client = client(&name);
-    t!(poll.register(&client,
-                     Token(1),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-    t!(server.connect());
-    loop {
-        t!(poll.poll(&mut events, None));
-        let e = events.iter().collect::<Vec<_>>();
-        debug!("events {:?}", e);
-        if let Some(event) = e.iter().find(|e| e.token() == Token(0)) {
-            if event.readiness().is_writable() {
-                break
-            }
-        }
-    }
-}
-
-#[test]
-fn write_then_drop() {
-    drop(env_logger::init());
-
-    let (mut server, mut client) = pipe();
-    let poll = t!(Poll::new());
-    t!(poll.register(&server,
-                     Token(0),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-    t!(poll.register(&client,
-                     Token(1),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-    assert_eq!(t!(client.write(b"1234")), 4);
-    drop(client);
-
-    let mut events = Events::with_capacity(128);
-
-    loop {
-        t!(poll.poll(&mut events, None));
-        let events = events.iter().collect::<Vec<_>>();
-        debug!("events {:?}", events);
-        if let Some(event) = events.iter().find(|e| e.token() == Token(0)) {
-            if event.readiness().is_readable() {
-                break
-            }
-        }
-    }
-
-    let mut buf = [0; 10];
-    assert_eq!(t!(server.read(&mut buf)), 4);
-    assert_eq!(&buf[..4], b"1234");
-}
-
-#[test]
-fn connect_twice() {
-    drop(env_logger::init());
-
-    let (mut server, name) = server();
-    let c1 = client(&name);
-    let poll = t!(Poll::new());
-    t!(poll.register(&server,
-                     Token(0),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-    t!(poll.register(&c1,
-                     Token(1),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-    drop(c1);
-
-    let mut events = Events::with_capacity(128);
-
-    loop {
-        t!(poll.poll(&mut events, None));
-        let events = events.iter().collect::<Vec<_>>();
-        debug!("events {:?}", events);
-        if let Some(event) = events.iter().find(|e| e.token() == Token(0)) {
-            if event.readiness().is_readable() {
-                break
-            }
-        }
-    }
-
-    let mut buf = [0; 10];
-    assert_eq!(t!(server.read(&mut buf)), 0);
-    t!(server.disconnect());
-    assert_eq!(server.connect().err().unwrap().kind(),
-               io::ErrorKind::WouldBlock);
-
-    let c2 = client(&name);
-    t!(poll.register(&c2,
-                     Token(2),
-                     Ready::readable() | Ready::writable(),
-                     PollOpt::edge()));
-
-    loop {
-        t!(poll.poll(&mut events, None));
-        let events = events.iter().collect::<Vec<_>>();
-        debug!("events {:?}", events);
-        if let Some(event) = events.iter().find(|e| e.token() == Token(0)) {
-            if event.readiness().is_writable() {
-                break
-            }
-        }
-    }
-}
--- a/toolkit/library/rust/gkrust-features.mozbuild
+++ b/toolkit/library/rust/gkrust-features.mozbuild
@@ -13,19 +13,19 @@ if CONFIG['MOZ_BUILD_WEBRENDER']:
     gkrust_features += ['quantum_render']
 
 if CONFIG['MOZ_PULSEAUDIO']:
     gkrust_features += ['cubeb_pulse_rust']
 
 if CONFIG['MOZ_RUST_SIMD']:
     gkrust_features += ['simd-accel']
 
-# This feature is not yet supported on all platforms, and this check needs to
+# This feature is only supported on Linux and macOS, and this check needs to
 # match MOZ_CUBEB_REMOTING in CubebUtils.cpp.
-if (CONFIG['OS_ARCH'] == 'Linux' and CONFIG['OS_TARGET'] != 'Android') or CONFIG['OS_ARCH'] == 'Darwin' or CONFIG['OS_ARCH'] == 'WINNT':
+if (CONFIG['OS_ARCH'] == 'Linux' and CONFIG['OS_TARGET'] != 'Android') or CONFIG['OS_ARCH'] == 'Darwin':
     gkrust_features += ['cubeb-remoting']
 
 if CONFIG['MOZ_MEMORY']:
     gkrust_features += ['moz_memory']
 
 if CONFIG['ENABLE_WASM_CRANELIFT']:
     gkrust_features += ['spidermonkey_rust']