Update crossbeam-channel to 0.5.14

Test: m
Change-Id: I9cf882d4c1f739b0ac266b6e44c9a9e48c756b65
diff --git a/crates/crossbeam-channel/.android-checksum.json b/crates/crossbeam-channel/.android-checksum.json
new file mode 100644
index 0000000..c47f3d4
--- /dev/null
+++ b/crates/crossbeam-channel/.android-checksum.json
@@ -0,0 +1 @@
+{"package":null,"files":{"LICENSE-MIT":"593bdd46275e49a263b81d8ee3722fd4fe9b452515844bcb39d06b9009948b6c","LICENSE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","src/lib.rs":"0e1a313ec6ecc9f4a62f787f9ed54bc36303330bc6c49a78182cba632defead8","src/flavors/list.rs":"71f27ab8c048611e9ab46ba7fb53d79b9f7b437b7812bb1df5bc8acf261215c7","Cargo.toml":"84590608c11a7909dff396dde9a0871ebdfc57f67868719588313846bf270fa7","src/select_macro.rs":"a2f3486573df5479c8599528f9aad482c6b3b248cb13e1a85b704fbadf878ddb","src/flavors/never.rs":"e1add67d5e644c7a91188316cb04f87eed59132731a2f60ae98ac339688ab526","src/channel.rs":"7f1f0dfa3988f8d905459d302dcf957ff3b29046b9307bc62f1f80c1503248c1","src/flavors/tick.rs":"c664d46c480d64224e169d89eea9015b45d0ef9bda6dbe995b15b98775d4cdc5","tests/select.rs":"6daa0e5d5ebac76e7f3d18cce7fc8f22b855c2adcc63ca1872c7e4922b53d172","tests/mpsc.rs":"71fd11d83f5eb56ca494d1ac19004ae351a07f0b1543a8f6b30ce08ab16aeae6","README.md":"979417de4cebc4c455c03dbf9f827d34f20c2e45f0b1b0d34e940126ae192f9e","examples/stopwatch.rs":"456cae25471bd57f4ee9df52738d380d75d200dd3cbda1bb75b965fb51ea1c0e","src/flavors/mod.rs":"73e845106cb07033e54bc7a700122de2728e8b1d2943f426e323fa4a39473dfe","LICENSE-APACHE":"3c7cd2396b5b772507febd2615d3d5a55b80103845037df77c87ba6e64872f2c","tests/tick.rs":"5ea9e59fd697863db698c737f399bf9d137a9e2e5b5664a647bc529b78b50015","cargo_embargo.json":"aa45a963da01d3f018be316cd5b7646a5b413ce2611c5218f2914d2e8a9efd0e","examples/matching.rs":"84daebdf99c6674a6926346d3df30ce1cd5e9b9e47786bf71a870e0f21539431","src/err.rs":"af5f575b751105369be3d62cb44de90d32f814483ba9aeef4c69394328c4d28e",".cargo-checksum.json":"e20e00ff147e4c895eb0fa9f3970be50447b53081b09f555282fe2d5ff309e2e","tests/after.rs":"4f3ef451c1182f0ee06e54e1acdae84eba8210d4d9fb9d806860cd50b3de5f06","benches/crossbeam.rs":"be0d9ada9a36023c7394d8949e3f57c9c1fd298f7c4402dd0bcdbb402780267a","examples/fibonacci.rs":"d3bec7355e6bb67d406d66a6adbf1e82b3f62938a28b8afb51043305418935e2","Cargo.lock":"0c59409e3be1bf6539cdab03f894b7a240352cc4967e0759c401add377445e09","src/context.rs":"1574f1e1de73150b3ae9db066cdd4a15a9d774108e3621eef6e01734bee756ce","src/flavors/zero.rs":"f3f6887ded550ff19ef3211f5b6fc24054984b5ee9f48a02a93e011b5716eda4","CHANGELOG.md":"6e77c8a5f22074904178d0a64a74f6e87222dfa9f56b807beb0bb361e6951dcf","LICENSE-THIRD-PARTY":"6514fe4bb820d46aa9d0c9665bcb590fe63ee56f7f4d1456cb962759f3671c6c","src/flavors/array.rs":"728a54c01fb09d684c8734c299f7232279007279a389fb98ca4c26c677e2d769","src/utils.rs":"af6478ee9e98f09fa7510c3d8abd46f6386c3d9ef2af9d81d89ff2f1433c2797","src/counter.rs":"b134b8d423ad877ae9270884fd1401619d9da3e7fec33317367e70b83199438f","tests/same_channel.rs":"9dbde7203a4f50cfc8414a4cc2323411b7ef5ce22efcf6fb84fe3d9b9763ec0c","tests/zero.rs":"c5967415e8d0a635c9d74ef8af9f139c2af9bc0bcf46042a85b6be0ba18d339a","tests/golang.rs":"01bad2e51360d57a78b15d281b5b6d5607c6bef8f356efea1d6bdcf656c47cae","tests/select_macro.rs":"e6b5a9228a5b2f04fd55bef2961de3510961a1da8cbcecb9cf7f566f79422ef4","tests/ready.rs":"0b6fdc95307434b04c7513fa3a62b5a5c0e3c4ab3890b19635f7b19da9cea702","tests/list.rs":"c599f6c82d40dfcac5cfc1b767768affed3c3e7139154180279851606aaac766","TEST_MAPPING":"e458a5dbc17af3f85b874533972b22391a7a66fc5abac59c3eafe2d643b112a5","tests/iter.rs":"a8afc4ba9ae6593def8a590321ee3de3585e97299f56f84a5d1e92f95bb480df","tests/never.rs":"9bfcd05648a722310d33d3aab6442697f20a4cabf0a49e85e240196e9e7b2b42","Android.bp":"0f1a385f95a26496766d9975e0a8fcc60e8d39ac7b6a2fbf4063f506d1037fe3","METADATA":"3309fc3da69124cff14db032b25ac599c1fbffc032d172af1fedf75ffb36b79f","src/select.rs":"b0277ef25000a7b641f5e7d0fad5f30769ca732176b6837b8b9068786aa86d96","src/waker.rs":"5c7c41f92da081c0304fa40f1cc46621bf960b3e422db379949e1dcebd65fdd3","src/flavors/at.rs":"9815ee409ab2069c5989089ef9b3857019bb7719fd8c4bff752637dcce0933a0","MODULE_LICENSE_APACHE2":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","tests/array.rs":"a7dfe71e2844662a60eb7450f8dd055bca05bbba204169aa0506eee7610f2cce","tests/thread_locals.rs":"fdf7ecbc8a05a861dde702524521877196a00c6d65bcaa814b129f44f297a264"}}
\ No newline at end of file
diff --git a/crates/crossbeam-channel/.cargo-checksum.json b/crates/crossbeam-channel/.cargo-checksum.json
index 6784db9..b6da487 100644
--- a/crates/crossbeam-channel/.cargo-checksum.json
+++ b/crates/crossbeam-channel/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"6b520b783f5e0c17c6caa975defb9ed6e0ae1254a6a41a9bcd03d249bc942289","Cargo.lock":"605ed4a922e22b42c8a7b75624dfd55d6f0bc96bf76bbf016b003a2c44ddc29a","Cargo.toml":"0f7a8020ede552c5370c101973e8b77cdf5ce6d41f4b6f7b1420b97491fd1e24","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5734ed989dfca1f625b40281ee9f4530f91b2411ec01cb748223e7eb87e201ab","LICENSE-THIRD-PARTY":"b16db96b93b1d7cf7bea533f572091ec6bca3234fbe0a83038be772ff391a44c","README.md":"5dfb91ebb498dec49948a440a53977109ec532388170e567c3c2a0339589aa4c","benches/crossbeam.rs":"96cb1abd23cac3ef8a7174a802e94609926b555bb02c9658c78723d433f1dd92","examples/fibonacci.rs":"4e88fa40048cdc31e9c7bb60347d46f92543d7ddf39cab3b52bfe44affdb6a02","examples/matching.rs":"63c250e164607a7a9f643d46f107bb5da846d49e89cf9069909562d20e530f71","examples/stopwatch.rs":"d02121258f08d56f1eb7997e19bcb9bacb6836cfa0abbba90a9e59d8a50ae5cf","src/channel.rs":"13fbbe12d4ec361855af1c3587fc80aea5f537db8dc44dd4f66c9e2b4ae9f5c1","src/context.rs":"477cc2b7bac7502fd2459288a58cc76f015b1ec8e87b853cda77ccb1808c6334","src/counter.rs":"b8f1e48ec634a7dab8e04c485209161587ecbbd2d57b0825467164d4554c6249","src/err.rs":"44cb2024ee6b0cd6fd24996430e53720769f64b4ac35016bc3e05cb9db48681d","src/flavors/array.rs":"79bc219187c9f40b156b9fe551c1176b66bf73e6d48905b23a2d74c6366a2205","src/flavors/at.rs":"04e07861534f2f7d5b5f884f2f5bc9c008427e6d0afa1c8ad401e1d7e54b57eb","src/flavors/list.rs":"280f55b51cefe9351a52c8d2186de368b688ad06885d083efe7e831726846520","src/flavors/mod.rs":"3d9d43bc38b0adb18c96c995c2bd3421d8e33ab6c30b20c3c467d21d48e485dc","src/flavors/never.rs":"747da857aa1a7601641f23f4930e6ad00ebaf50456d9be5c7aa270e2ecc24dcb","src/flavors/tick.rs":"0916ca3faef30b8cc591137701c456d5fc5b5b49cb1edad1e3a80d35bae222bb","src/flavors/zero.rs":"f9cbc9e035fadce808a4af86a223cfded89990ba1e9acfe731fb17a7fe12b432","src/lib.rs":"5b1c406fd1ce6140feae9000be361858da2aabe7fc9fffd0eafcb88020d2b268","src/select.rs":"7aa8addb82427141b0a4afa16fa4d23a02becab115a0a5a6d6d327728fd0672f","src/select_macro.rs":"522cfc8155825c1f260922c17ea6ef8ae672cf94863750c1a6115db2cbc9fc18","src/utils.rs":"9bd81aeb385a81409a63f4b9edc35444c7fd1d2724725f9c34ad7ca39dd69a18","src/waker.rs":"017f87a120d945502701c0dba79062c7fe55d44e5907cc6f8605b4510c90d529","tests/after.rs":"0154a8e152880db17a20514ecdd49dabc361d3629858d119b9746b5e932c780c","tests/array.rs":"a57ae6264e676f573d7adb5c4b024994e98bc6811352516adb3444f880f7125e","tests/golang.rs":"7b2ef219ba8a21841c133512f3a540f8279a2458304e9bbed7da81d6091ecd82","tests/iter.rs":"25dc02135bbae9d47a30f9047661648e66bdc134e40ba78bc2fbacbb8b3819bc","tests/list.rs":"3d1a4ae23bb6b4767242b8109a8efda26f1d3b28c0f90da3368f8eb9ca0eee37","tests/mpsc.rs":"5fbb5342fa7c9e4bcda5545255e0979dc6b9ba638edee127acf75372c18c925f","tests/never.rs":"ee40c4fc4dd5af4983fae8de6927f52b81174d222c162f745b26c4a6c7108e4f","tests/ready.rs":"4361352fa94254041e6c73e97b13be032c2d51c741f2a50519efe3000cf4dc28","tests/same_channel.rs":"2bab761443671e841e1b2476bd8082d75533a2f6be7946f5dbcee67cdc82dccb","tests/select.rs":"101ea8afd9a40d24c2d2aec29e5f2fdc4faac51aa1d7c9fe077b364f12edd206","tests/select_macro.rs":"4d6d52ad48f385c5b8f5023a590e00e7a4b632e80bd929b6fc89a53f5faee515","tests/thread_locals.rs":"f42fcddca959b3b44cd545b92949d65e33a54332b27f490ec92f9f29b7f8290c","tests/tick.rs":"5f697bd14c48505d932e82065b5302ef668e1cc19cac18e8ac22e0c83c221c1d","tests/zero.rs":"9c5af802d5efb2c711f8242b8905ed29cc2601e48dbd95e41c7e6fbfe2918398"},"package":"33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"4a7e4bc790fa3e9acb9577c489964690aa3a9ef549571fefd9e15362022901c2","Cargo.lock":"a4cbda8f2355ee7e9543e1eb01fb67173c079ae0337146c12fa577a4df81fa83","Cargo.toml":"a61aa427c7e7b3d318db6130cb49e4d1a0a2677853a3f9b6774c0cba93106cf8","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5734ed989dfca1f625b40281ee9f4530f91b2411ec01cb748223e7eb87e201ab","LICENSE-THIRD-PARTY":"b16db96b93b1d7cf7bea533f572091ec6bca3234fbe0a83038be772ff391a44c","README.md":"5dfb91ebb498dec49948a440a53977109ec532388170e567c3c2a0339589aa4c","benches/crossbeam.rs":"96cb1abd23cac3ef8a7174a802e94609926b555bb02c9658c78723d433f1dd92","examples/fibonacci.rs":"4e88fa40048cdc31e9c7bb60347d46f92543d7ddf39cab3b52bfe44affdb6a02","examples/matching.rs":"63c250e164607a7a9f643d46f107bb5da846d49e89cf9069909562d20e530f71","examples/stopwatch.rs":"d02121258f08d56f1eb7997e19bcb9bacb6836cfa0abbba90a9e59d8a50ae5cf","src/channel.rs":"13fbbe12d4ec361855af1c3587fc80aea5f537db8dc44dd4f66c9e2b4ae9f5c1","src/context.rs":"0c5f278572d3db33ed3dfba45f62c8db372c9153db0695a5cdecf700c2ba73a5","src/counter.rs":"b8f1e48ec634a7dab8e04c485209161587ecbbd2d57b0825467164d4554c6249","src/err.rs":"44cb2024ee6b0cd6fd24996430e53720769f64b4ac35016bc3e05cb9db48681d","src/flavors/array.rs":"79bc219187c9f40b156b9fe551c1176b66bf73e6d48905b23a2d74c6366a2205","src/flavors/at.rs":"04e07861534f2f7d5b5f884f2f5bc9c008427e6d0afa1c8ad401e1d7e54b57eb","src/flavors/list.rs":"a1269b2a9b83e688cbd4ba2f06f6ce02763ca5dcb3ed27214d0dc64a97de30f6","src/flavors/mod.rs":"3d9d43bc38b0adb18c96c995c2bd3421d8e33ab6c30b20c3c467d21d48e485dc","src/flavors/never.rs":"747da857aa1a7601641f23f4930e6ad00ebaf50456d9be5c7aa270e2ecc24dcb","src/flavors/tick.rs":"0916ca3faef30b8cc591137701c456d5fc5b5b49cb1edad1e3a80d35bae222bb","src/flavors/zero.rs":"f9cbc9e035fadce808a4af86a223cfded89990ba1e9acfe731fb17a7fe12b432","src/lib.rs":"5b1c406fd1ce6140feae9000be361858da2aabe7fc9fffd0eafcb88020d2b268","src/select.rs":"301c765751586204371bedb69162e23bcf7e094cbc37b72203698a18b889550f","src/select_macro.rs":"f30b726dff104b17c2dfbd67b271758d8c06d63ec4811ffab88b2e1dac43e3df","src/utils.rs":"9bd81aeb385a81409a63f4b9edc35444c7fd1d2724725f9c34ad7ca39dd69a18","src/waker.rs":"017f87a120d945502701c0dba79062c7fe55d44e5907cc6f8605b4510c90d529","tests/after.rs":"0154a8e152880db17a20514ecdd49dabc361d3629858d119b9746b5e932c780c","tests/array.rs":"a57ae6264e676f573d7adb5c4b024994e98bc6811352516adb3444f880f7125e","tests/golang.rs":"7b2ef219ba8a21841c133512f3a540f8279a2458304e9bbed7da81d6091ecd82","tests/iter.rs":"25dc02135bbae9d47a30f9047661648e66bdc134e40ba78bc2fbacbb8b3819bc","tests/list.rs":"e71d34f790af290e463707c2336ff221f7841767e961b91747aa00e21df0ad32","tests/mpsc.rs":"5fbb5342fa7c9e4bcda5545255e0979dc6b9ba638edee127acf75372c18c925f","tests/never.rs":"ee40c4fc4dd5af4983fae8de6927f52b81174d222c162f745b26c4a6c7108e4f","tests/ready.rs":"4361352fa94254041e6c73e97b13be032c2d51c741f2a50519efe3000cf4dc28","tests/same_channel.rs":"2bab761443671e841e1b2476bd8082d75533a2f6be7946f5dbcee67cdc82dccb","tests/select.rs":"101ea8afd9a40d24c2d2aec29e5f2fdc4faac51aa1d7c9fe077b364f12edd206","tests/select_macro.rs":"e83bd33b34c47d703abe06420a23868809468516943347bdbfb6af4db0cec65a","tests/thread_locals.rs":"f42fcddca959b3b44cd545b92949d65e33a54332b27f490ec92f9f29b7f8290c","tests/tick.rs":"5f697bd14c48505d932e82065b5302ef668e1cc19cac18e8ac22e0c83c221c1d","tests/zero.rs":"9c5af802d5efb2c711f8242b8905ed29cc2601e48dbd95e41c7e6fbfe2918398"},"package":"06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"}
\ No newline at end of file
diff --git a/crates/crossbeam-channel/Android.bp b/crates/crossbeam-channel/Android.bp
index 407bdf1..ea57442 100644
--- a/crates/crossbeam-channel/Android.bp
+++ b/crates/crossbeam-channel/Android.bp
@@ -18,7 +18,7 @@
     host_supported: true,
     crate_name: "crossbeam_channel",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.5.13",
+    cargo_pkg_version: "0.5.14",
     crate_root: "src/lib.rs",
     edition: "2021",
     features: [
diff --git a/crates/crossbeam-channel/CHANGELOG.md b/crates/crossbeam-channel/CHANGELOG.md
index 4d7fa0f..60ac051 100644
--- a/crates/crossbeam-channel/CHANGELOG.md
+++ b/crates/crossbeam-channel/CHANGELOG.md
@@ -1,3 +1,10 @@
+# Version 0.5.14
+
+- Fix stack overflow when sending large value to unbounded channel. (#1146, #1147)
+- Add `Select::new_biased` function. (#1150)
+- Remove inefficient spinning. (#1154)
+- Suppress buggy `clippy::zero_repeat_side_effects` lint in macro generated code. (#1123)
+
 # Version 0.5.13
 
 - Add `select_biased!` macro. (#1040)
diff --git a/crates/crossbeam-channel/Cargo.lock b/crates/crossbeam-channel/Cargo.lock
index ec55f94..591a71a 100644
--- a/crates/crossbeam-channel/Cargo.lock
+++ b/crates/crossbeam-channel/Cargo.lock
@@ -3,6 +3,12 @@
 version = 3
 
 [[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
 name = "cfg-if"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -10,7 +16,7 @@
 
 [[package]]
 name = "crossbeam-channel"
-version = "0.5.13"
+version = "0.5.14"
 dependencies = [
  "crossbeam-utils",
  "num_cpus",
@@ -20,9 +26,9 @@
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.19"
+version = "0.8.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
 
 [[package]]
 name = "getrandom"
@@ -43,9 +49,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.154"
+version = "0.2.158"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346"
+checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
 
 [[package]]
 name = "num_cpus"
@@ -59,9 +65,30 @@
 
 [[package]]
 name = "ppv-lite86"
-version = "0.2.17"
+version = "0.2.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+dependencies = [
+ "proc-macro2",
+]
 
 [[package]]
 name = "rand"
@@ -113,7 +140,45 @@
 ]
 
 [[package]]
+name = "syn"
+version = "2.0.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
+
+[[package]]
 name = "wasi"
 version = "0.11.0+wasi-snapshot-preview1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/crates/crossbeam-channel/Cargo.toml b/crates/crossbeam-channel/Cargo.toml
index fb617f0..39b0927 100644
--- a/crates/crossbeam-channel/Cargo.toml
+++ b/crates/crossbeam-channel/Cargo.toml
@@ -13,7 +13,13 @@
 edition = "2021"
 rust-version = "1.60"
 name = "crossbeam-channel"
-version = "0.5.13"
+version = "0.5.14"
+build = false
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
 description = "Multi-producer multi-consumer channels for message passing"
 homepage = "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-channel"
 readme = "README.md"
@@ -32,6 +38,82 @@
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/crossbeam-rs/crossbeam"
 
+[lib]
+name = "crossbeam_channel"
+path = "src/lib.rs"
+
+[[example]]
+name = "fibonacci"
+path = "examples/fibonacci.rs"
+
+[[example]]
+name = "matching"
+path = "examples/matching.rs"
+
+[[example]]
+name = "stopwatch"
+path = "examples/stopwatch.rs"
+
+[[test]]
+name = "after"
+path = "tests/after.rs"
+
+[[test]]
+name = "array"
+path = "tests/array.rs"
+
+[[test]]
+name = "golang"
+path = "tests/golang.rs"
+
+[[test]]
+name = "iter"
+path = "tests/iter.rs"
+
+[[test]]
+name = "list"
+path = "tests/list.rs"
+
+[[test]]
+name = "mpsc"
+path = "tests/mpsc.rs"
+
+[[test]]
+name = "never"
+path = "tests/never.rs"
+
+[[test]]
+name = "ready"
+path = "tests/ready.rs"
+
+[[test]]
+name = "same_channel"
+path = "tests/same_channel.rs"
+
+[[test]]
+name = "select"
+path = "tests/select.rs"
+
+[[test]]
+name = "select_macro"
+path = "tests/select_macro.rs"
+
+[[test]]
+name = "thread_locals"
+path = "tests/thread_locals.rs"
+
+[[test]]
+name = "tick"
+path = "tests/tick.rs"
+
+[[test]]
+name = "zero"
+path = "tests/zero.rs"
+
+[[bench]]
+name = "crossbeam"
+path = "benches/crossbeam.rs"
+
 [dependencies.crossbeam-utils]
 version = "0.8.18"
 default-features = false
@@ -49,6 +131,18 @@
 default = ["std"]
 std = ["crossbeam-utils/std"]
 
+[lints.clippy.declare_interior_mutable_const]
+level = "allow"
+priority = 1
+
+[lints.clippy.lint_groups_priority]
+level = "allow"
+priority = 1
+
 [lints.rust.unexpected_cfgs]
 level = "warn"
 priority = 0
+check-cfg = [
+    "cfg(crossbeam_loom)",
+    "cfg(crossbeam_sanitize)",
+]
diff --git a/crates/crossbeam-channel/METADATA b/crates/crossbeam-channel/METADATA
index d213f47..5b6b3e6 100644
--- a/crates/crossbeam-channel/METADATA
+++ b/crates/crossbeam-channel/METADATA
@@ -1,17 +1,17 @@
 name: "crossbeam-channel"
 description: "Multi-producer multi-consumer channels for message passing"
 third_party {
-  version: "0.5.13"
+  version: "0.5.14"
   license_type: NOTICE
   last_upgrade_date {
     year: 2024
-    month: 10
-    day: 2
+    month: 12
+    day: 19
   }
   homepage: "https://crates.io/crates/crossbeam-channel"
   identifier {
     type: "Archive"
-    value: "https://static.crates.io/crates/crossbeam-channel/crossbeam-channel-0.5.13.crate"
-    version: "0.5.13"
+    value: "https://static.crates.io/crates/crossbeam-channel/crossbeam-channel-0.5.14.crate"
+    version: "0.5.14"
   }
 }
diff --git a/crates/crossbeam-channel/src/context.rs b/crates/crossbeam-channel/src/context.rs
index 4230027..993a420 100644
--- a/crates/crossbeam-channel/src/context.rs
+++ b/crates/crossbeam-channel/src/context.rs
@@ -138,21 +138,6 @@
     /// If the deadline is reached, `Selected::Aborted` will be selected.
     #[inline]
     pub fn wait_until(&self, deadline: Option<Instant>) -> Selected {
-        // Spin for a short time, waiting until an operation is selected.
-        let backoff = Backoff::new();
-        loop {
-            let sel = Selected::from(self.inner.select.load(Ordering::Acquire));
-            if sel != Selected::Waiting {
-                return sel;
-            }
-
-            if backoff.is_completed() {
-                break;
-            } else {
-                backoff.snooze();
-            }
-        }
-
         loop {
             // Check whether an operation has been selected.
             let sel = Selected::from(self.inner.select.load(Ordering::Acquire));
diff --git a/crates/crossbeam-channel/src/flavors/list.rs b/crates/crossbeam-channel/src/flavors/list.rs
index e7fb615..6c15991 100644
--- a/crates/crossbeam-channel/src/flavors/list.rs
+++ b/crates/crossbeam-channel/src/flavors/list.rs
@@ -1,5 +1,6 @@
 //! Unbounded channel implemented as a linked list.
 
+use std::alloc::{alloc_zeroed, handle_alloc_error, Layout};
 use std::boxed::Box;
 use std::cell::UnsafeCell;
 use std::marker::PhantomData;
@@ -50,11 +51,6 @@
 }
 
 impl<T> Slot<T> {
-    const UNINIT: Self = Self {
-        msg: UnsafeCell::new(MaybeUninit::uninit()),
-        state: AtomicUsize::new(0),
-    };
-
     /// Waits until a message is written into the slot.
     fn wait_write(&self) {
         let backoff = Backoff::new();
@@ -76,12 +72,31 @@
 }
 
 impl<T> Block<T> {
+    const LAYOUT: Layout = {
+        let layout = Layout::new::<Self>();
+        assert!(
+            layout.size() != 0,
+            "Block should never be zero-sized, as it has an AtomicPtr field"
+        );
+        layout
+    };
+
     /// Creates an empty block.
-    fn new() -> Block<T> {
-        Self {
-            next: AtomicPtr::new(ptr::null_mut()),
-            slots: [Slot::UNINIT; BLOCK_CAP],
+    fn new() -> Box<Self> {
+        // SAFETY: layout is not zero-sized
+        let ptr = unsafe { alloc_zeroed(Self::LAYOUT) };
+        // Handle allocation failure
+        if ptr.is_null() {
+            handle_alloc_error(Self::LAYOUT)
         }
+        // SAFETY: This is safe because:
+        //  [1] `Block::next` (AtomicPtr) may be safely zero initialized.
+        //  [2] `Block::slots` (Array) may be safely zero initialized because of [3, 4].
+        //  [3] `Slot::msg` (UnsafeCell) may be safely zero initialized because it
+        //       holds a MaybeUninit.
+        //  [4] `Slot::state` (AtomicUsize) may be safely zero initialized.
+        // TODO: unsafe { Box::new_zeroed().assume_init() }
+        unsafe { Box::from_raw(ptr.cast()) }
     }
 
     /// Waits until the next pointer is set.
@@ -223,13 +238,13 @@
             // If we're going to have to install the next block, allocate it in advance in order to
             // make the wait for other threads as short as possible.
             if offset + 1 == BLOCK_CAP && next_block.is_none() {
-                next_block = Some(Box::new(Block::<T>::new()));
+                next_block = Some(Block::<T>::new());
             }
 
             // If this is the first message to be sent into the channel, we need to allocate the
             // first block and install it.
             if block.is_null() {
-                let new = Box::into_raw(Box::new(Block::<T>::new()));
+                let new = Box::into_raw(Block::<T>::new());
 
                 if self
                     .tail
diff --git a/crates/crossbeam-channel/src/select.rs b/crates/crossbeam-channel/src/select.rs
index 4bfa65c..36e68b2 100644
--- a/crates/crossbeam-channel/src/select.rs
+++ b/crates/crossbeam-channel/src/select.rs
@@ -611,6 +611,9 @@
 
     /// The next index to assign to an operation.
     next_index: usize,
+
+    /// Whether to use the index of handles as bias for selecting ready operations.
+    biased: bool,
 }
 
 unsafe impl Send for Select<'_> {}
@@ -633,6 +636,28 @@
         Select {
             handles: Vec::with_capacity(4),
             next_index: 0,
+            biased: false,
+        }
+    }
+
+    /// Creates an empty list of channel operations with biased selection.
+    ///
+    /// When multiple handles are ready, this will select the operation with the lowest index.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use crossbeam_channel::Select;
+    ///
+    /// let mut sel = Select::new_biased();
+    ///
+    /// // The list of operations is empty, which means no operation can be selected.
+    /// assert!(sel.try_select().is_err());
+    /// ```
+    pub fn new_biased() -> Self {
+        Self {
+            biased: true,
+            ..Default::default()
         }
     }
 
@@ -774,7 +799,7 @@
     /// }
     /// ```
     pub fn try_select(&mut self) -> Result<SelectedOperation<'a>, TrySelectError> {
-        try_select(&mut self.handles, false)
+        try_select(&mut self.handles, self.biased)
     }
 
     /// Blocks until one of the operations becomes ready and selects it.
@@ -821,7 +846,7 @@
     /// }
     /// ```
     pub fn select(&mut self) -> SelectedOperation<'a> {
-        select(&mut self.handles, false)
+        select(&mut self.handles, self.biased)
     }
 
     /// Blocks for a limited time until one of the operations becomes ready and selects it.
@@ -871,7 +896,7 @@
         &mut self,
         timeout: Duration,
     ) -> Result<SelectedOperation<'a>, SelectTimeoutError> {
-        select_timeout(&mut self.handles, timeout, false)
+        select_timeout(&mut self.handles, timeout, self.biased)
     }
 
     /// Blocks until a given deadline, or until one of the operations becomes ready and selects it.
@@ -923,7 +948,7 @@
         &mut self,
         deadline: Instant,
     ) -> Result<SelectedOperation<'a>, SelectTimeoutError> {
-        select_deadline(&mut self.handles, deadline, false)
+        select_deadline(&mut self.handles, deadline, self.biased)
     }
 
     /// Attempts to find a ready operation without blocking.
@@ -962,7 +987,7 @@
     /// }
     /// ```
     pub fn try_ready(&mut self) -> Result<usize, TryReadyError> {
-        match run_ready(&mut self.handles, Timeout::Now, false) {
+        match run_ready(&mut self.handles, Timeout::Now, self.biased) {
             None => Err(TryReadyError),
             Some(index) => Ok(index),
         }
@@ -1015,7 +1040,7 @@
             panic!("no operations have been added to `Select`");
         }
 
-        run_ready(&mut self.handles, Timeout::Never, false).unwrap()
+        run_ready(&mut self.handles, Timeout::Never, self.biased).unwrap()
     }
 
     /// Blocks for a limited time until one of the operations becomes ready.
@@ -1108,7 +1133,7 @@
     /// }
     /// ```
     pub fn ready_deadline(&mut self, deadline: Instant) -> Result<usize, ReadyTimeoutError> {
-        match run_ready(&mut self.handles, Timeout::At(deadline), false) {
+        match run_ready(&mut self.handles, Timeout::At(deadline), self.biased) {
             None => Err(ReadyTimeoutError),
             Some(index) => Ok(index),
         }
@@ -1120,6 +1145,7 @@
         Select {
             handles: self.handles.clone(),
             next_index: self.next_index,
+            biased: self.biased,
         }
     }
 }
diff --git a/crates/crossbeam-channel/src/select_macro.rs b/crates/crossbeam-channel/src/select_macro.rs
index e109404..154e254 100644
--- a/crates/crossbeam-channel/src/select_macro.rs
+++ b/crates/crossbeam-channel/src/select_macro.rs
@@ -687,7 +687,7 @@
         const _LEN: usize = $crate::crossbeam_channel_internal!(@count ($($cases)*));
         let _handle: &dyn $crate::internal::SelectHandle = &$crate::never::<()>();
 
-        #[allow(unused_mut)]
+        #[allow(unused_mut, clippy::zero_repeat_side_effects)]
         let mut _sel = [(_handle, 0, ::std::ptr::null()); _LEN];
 
         $crate::crossbeam_channel_internal!(
diff --git a/crates/crossbeam-channel/tests/list.rs b/crates/crossbeam-channel/tests/list.rs
index ebe6f6f..beabac8 100644
--- a/crates/crossbeam-channel/tests/list.rs
+++ b/crates/crossbeam-channel/tests/list.rs
@@ -580,3 +580,18 @@
     })
     .unwrap();
 }
+
+// If `Block` is created on the stack, the array of slots will multiply this `BigStruct` and
+// probably overflow the thread stack. It's now directly created on the heap to avoid this.
+#[test]
+fn stack_overflow() {
+    const N: usize = 32_768;
+    struct BigStruct {
+        _data: [u8; N],
+    }
+
+    let (sender, receiver) = unbounded::<BigStruct>();
+    sender.send(BigStruct { _data: [0u8; N] }).unwrap();
+
+    for _data in receiver.try_iter() {}
+}
diff --git a/crates/crossbeam-channel/tests/select_macro.rs b/crates/crossbeam-channel/tests/select_macro.rs
index 794e026..aaffa70 100644
--- a/crates/crossbeam-channel/tests/select_macro.rs
+++ b/crates/crossbeam-channel/tests/select_macro.rs
@@ -858,6 +858,7 @@
     assert!(hits.iter().all(|x| *x >= COUNT / hits.len() / 2));
 }
 
+#[cfg_attr(crossbeam_sanitize, ignore)] // TODO: flaky: https://github.com/crossbeam-rs/crossbeam/issues/1094
 #[test]
 fn fairness2() {
     #[cfg(miri)]
diff --git a/pseudo_crate/Cargo.lock b/pseudo_crate/Cargo.lock
index 0cfa794..fb9fcae 100644
--- a/pseudo_crate/Cargo.lock
+++ b/pseudo_crate/Cargo.lock
@@ -1467,9 +1467,9 @@
 
 [[package]]
 name = "crossbeam-channel"
-version = "0.5.13"
+version = "0.5.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2"
+checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
 dependencies = [
  "crossbeam-utils",
 ]
diff --git a/pseudo_crate/Cargo.toml b/pseudo_crate/Cargo.toml
index fa7d24f..0fe96b9 100644
--- a/pseudo_crate/Cargo.toml
+++ b/pseudo_crate/Cargo.toml
@@ -71,7 +71,7 @@
 crc32fast = "=1.4.2"
 criterion = "=0.4.0"
 criterion-plot = "=0.5.0"
-crossbeam-channel = "=0.5.13"
+crossbeam-channel = "=0.5.14"
 crossbeam-deque = "=0.8.6"
 crossbeam-epoch = "=0.9.18"
 crossbeam-queue = "=0.3.11"