summaryrefslogtreecommitdiffstats
path: root/vendor/crossbeam
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/crossbeam
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/crossbeam')
-rw-r--r--vendor/crossbeam/.cargo-checksum.json1
-rw-r--r--vendor/crossbeam/CHANGELOG.md93
-rw-r--r--vendor/crossbeam/Cargo.toml59
-rw-r--r--vendor/crossbeam/LICENSE-APACHE201
-rw-r--r--vendor/crossbeam/LICENSE-MIT27
-rw-r--r--vendor/crossbeam/README.md158
-rw-r--r--vendor/crossbeam/no_atomic.rs59
-rw-r--r--vendor/crossbeam/src/lib.rs96
-rw-r--r--vendor/crossbeam/tests/subcrates.rs47
9 files changed, 741 insertions, 0 deletions
diff --git a/vendor/crossbeam/.cargo-checksum.json b/vendor/crossbeam/.cargo-checksum.json
new file mode 100644
index 000000000..0bd859983
--- /dev/null
+++ b/vendor/crossbeam/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"CHANGELOG.md":"e8dcdd4c84fced11ce3e9be9246dd511e9d09b0b36497c6e569ed0427b57424a","Cargo.toml":"a1452bb8649a66814e473799942aa624243bab0e5257a5b11ce994253b41ecb4","LICENSE-APACHE":"6f712474a3e3be1386d2d0c29449850ea788da64d35cff0fc8799acf741e9ecd","LICENSE-MIT":"5734ed989dfca1f625b40281ee9f4530f91b2411ec01cb748223e7eb87e201ab","README.md":"d1d81cf88e580608f27bf4d2bb7f6f2d01c2c1f1d26be86ec1daa7aa455e9f62","no_atomic.rs":"a2621c1b029c614fb0ab8e3f5cda2e839df88d90d26133181c1b901965f7eec4","src/lib.rs":"e896ef1e4326db5202cebdd57dd606f96113d5a8700e746bfe8909978ac84a7f","tests/subcrates.rs":"69cbe766a855ad6278cc969a61ba871eba3594afb5c2d3c647dff5b794e160ab"},"package":"4ae5588f6b3c3cb05239e90bd110f257254aecd01e4635400391aeae07497845"} \ No newline at end of file
diff --git a/vendor/crossbeam/CHANGELOG.md b/vendor/crossbeam/CHANGELOG.md
new file mode 100644
index 000000000..f756fbb73
--- /dev/null
+++ b/vendor/crossbeam/CHANGELOG.md
@@ -0,0 +1,93 @@
+# Version 0.8.1
+
+- Support targets that do not have atomic CAS on stable Rust (#698)
+
+# Version 0.8.0
+
+- Bump the minimum supported Rust version to 1.36.
+- Bump `crossbeam-channel` to `0.5`.
+- Bump `crossbeam-deque` to `0.8`.
+- Bump `crossbeam-epoch` to `0.9`.
+- Bump `crossbeam-queue` to `0.3`.
+- Bump `crossbeam-utils` to `0.8`.
+
+# Version 0.7.3
+
+- Fix breakage with nightly feature due to rust-lang/rust#65214.
+- Bump `crossbeam-channel` to `0.4`.
+- Bump `crossbeam-epoch` to `0.8`.
+- Bump `crossbeam-queue` to `0.2`.
+- Bump `crossbeam-utils` to `0.7`.
+
+# Version 0.7.2
+
+- Bump `crossbeam-channel` to `0.3.9`.
+- Bump `crossbeam-epoch` to `0.7.2`.
+- Bump `crossbeam-utils` to `0.6.6`.
+
+# Version 0.7.1
+
+- Bump `crossbeam-utils` to `0.6.5`.
+
+# Version 0.7.0
+
+- Remove `ArcCell`, `MsQueue`, and `TreiberStack`.
+- Change the interface of `ShardedLock` to match `RwLock`.
+- Add `SegQueue::len()`.
+- Rename `SegQueue::try_pop()` to `SegQueue::pop()`.
+- Change the return type of `SegQueue::pop()` to `Result`.
+- Introduce `ArrayQueue`.
+- Update dependencies.
+
+# Version 0.6.0
+
+- Update dependencies.
+
+# Version 0.5.0
+
+- Update `crossbeam-channel` to 0.3.
+- Update `crossbeam-utils` to 0.6.
+- Add `AtomicCell`, `SharedLock`, and `WaitGroup`.
+
+# Version 0.4.1
+
+- Fix a double-free bug in `MsQueue` and `SegQueue`.
+
+# Version 0.4
+
+- Switch to the new implementation of epoch-based reclamation in
+ [`crossbeam-epoch`](https://github.com/crossbeam-rs/crossbeam-epoch), fixing numerous bugs in the
+ old implementation. Its API is changed in a backward-incompatible way.
+- Switch to the new implementation of `CachePadded` and scoped thread in
+ [`crossbeam-utils`](https://github.com/crossbeam-rs/crossbeam-utils). The scoped thread API is
+ changed in a backward-incompatible way.
+- Switch to the new implementation of Chase-Lev deque in
+ [`crossbeam-deque`](https://github.com/crossbeam-rs/crossbeam-deque). Its API is changed in a
+ backward-incompatible way.
+- Export channel implemented in
+ [`crossbeam-channel`](https://github.com/crossbeam-rs/crossbeam-channel).
+- Remove `AtomicOption`.
+- Implement `Default` and `From` traits.
+
+# Version 0.3
+
+- Introduced `ScopedThreadBuilder` with the ability to name threads and set stack size
+- `Worker` methods in the Chase-Lev deque don't require mutable access anymore
+- Fixed a bug when unblocking `pop()` in `MsQueue`
+- Implemented `Drop` for `MsQueue`, `SegQueue`, and `TreiberStack`
+- Implemented `Default` for `TreiberStack`
+- Added `is_empty` to `SegQueue`
+- Renamed `mem::epoch` to `epoch`
+- Other bug fixes
+
+# Version 0.2
+
+- Changed existing non-blocking `pop` methods to `try_pop`
+- Added blocking `pop` support to Michael-Scott queue
+- Added Chase-Lev work-stealing deque
+
+# Version 0.1
+
+- Added [epoch-based memory management](http://aturon.github.io/blog/2015/08/27/epoch/)
+- Added Michael-Scott queue
+- Added Segmented array queue
diff --git a/vendor/crossbeam/Cargo.toml b/vendor/crossbeam/Cargo.toml
new file mode 100644
index 000000000..71710f835
--- /dev/null
+++ b/vendor/crossbeam/Cargo.toml
@@ -0,0 +1,59 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies
+#
+# 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]
+edition = "2018"
+name = "crossbeam"
+version = "0.8.1"
+authors = ["The Crossbeam Project Developers"]
+exclude = ["/.github", "/ci"]
+description = "Tools for concurrent programming"
+homepage = "https://github.com/crossbeam-rs/crossbeam"
+documentation = "https://docs.rs/crossbeam"
+keywords = ["atomic", "garbage", "non-blocking", "lock-free", "rcu"]
+categories = ["concurrency", "memory-management", "data-structures", "no-std"]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/crossbeam-rs/crossbeam"
+[dependencies.cfg-if]
+version = "1"
+
+[dependencies.crossbeam-channel]
+version = "0.5"
+optional = true
+default-features = false
+
+[dependencies.crossbeam-deque]
+version = "0.8"
+optional = true
+default-features = false
+
+[dependencies.crossbeam-epoch]
+version = "0.9.5"
+optional = true
+default-features = false
+
+[dependencies.crossbeam-queue]
+version = "0.3.2"
+optional = true
+default-features = false
+
+[dependencies.crossbeam-utils]
+version = "0.8.5"
+default-features = false
+[dev-dependencies.rand]
+version = "0.8"
+
+[features]
+alloc = ["crossbeam-epoch/alloc", "crossbeam-queue/alloc"]
+default = ["std"]
+nightly = ["crossbeam-epoch/nightly", "crossbeam-utils/nightly", "crossbeam-queue/nightly"]
+std = ["alloc", "crossbeam-channel/std", "crossbeam-deque/std", "crossbeam-epoch/std", "crossbeam-queue/std", "crossbeam-utils/std"]
diff --git a/vendor/crossbeam/LICENSE-APACHE b/vendor/crossbeam/LICENSE-APACHE
new file mode 100644
index 000000000..bb9abdd7f
--- /dev/null
+++ b/vendor/crossbeam/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ 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 2019 The Crossbeam Project Developers
+
+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.
diff --git a/vendor/crossbeam/LICENSE-MIT b/vendor/crossbeam/LICENSE-MIT
new file mode 100644
index 000000000..068d491fd
--- /dev/null
+++ b/vendor/crossbeam/LICENSE-MIT
@@ -0,0 +1,27 @@
+The MIT License (MIT)
+
+Copyright (c) 2019 The Crossbeam Project Developers
+
+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.
diff --git a/vendor/crossbeam/README.md b/vendor/crossbeam/README.md
new file mode 100644
index 000000000..1ed435c0a
--- /dev/null
+++ b/vendor/crossbeam/README.md
@@ -0,0 +1,158 @@
+# Crossbeam
+
+[![Build Status](https://github.com/crossbeam-rs/crossbeam/workflows/CI/badge.svg)](
+https://github.com/crossbeam-rs/crossbeam/actions)
+[![License](https://img.shields.io/badge/license-MIT_OR_Apache--2.0-blue.svg)](
+https://github.com/crossbeam-rs/crossbeam#license)
+[![Cargo](https://img.shields.io/crates/v/crossbeam.svg)](
+https://crates.io/crates/crossbeam)
+[![Documentation](https://docs.rs/crossbeam/badge.svg)](
+https://docs.rs/crossbeam)
+[![Rust 1.36+](https://img.shields.io/badge/rust-1.36+-lightgray.svg)](
+https://www.rust-lang.org)
+[![chat](https://img.shields.io/discord/569610676205781012.svg?logo=discord)](https://discord.com/invite/JXYwgWZ)
+
+This crate provides a set of tools for concurrent programming:
+
+#### Atomics
+
+* [`AtomicCell`], a thread-safe mutable memory location.<sup>(no_std)</sup>
+* [`AtomicConsume`], for reading from primitive atomic types with "consume" ordering.<sup>(no_std)</sup>
+
+#### Data structures
+
+* [`deque`], work-stealing deques for building task schedulers.
+* [`ArrayQueue`], a bounded MPMC queue that allocates a fixed-capacity buffer on construction.<sup>(alloc)</sup>
+* [`SegQueue`], an unbounded MPMC queue that allocates small buffers, segments, on demand.<sup>(alloc)</sup>
+
+#### Memory management
+
+* [`epoch`], an epoch-based garbage collector.<sup>(alloc)</sup>
+
+#### Thread synchronization
+
+* [`channel`], multi-producer multi-consumer channels for message passing.
+* [`Parker`], a thread parking primitive.
+* [`ShardedLock`], a sharded reader-writer lock with fast concurrent reads.
+* [`WaitGroup`], for synchronizing the beginning or end of some computation.
+
+#### Utilities
+
+* [`Backoff`], for exponential backoff in spin loops.<sup>(no_std)</sup>
+* [`CachePadded`], for padding and aligning a value to the length of a cache line.<sup>(no_std)</sup>
+* [`scope`], for spawning threads that borrow local variables from the stack.
+
+*Features marked with <sup>(no_std)</sup> can be used in `no_std` environments.*<br/>
+*Features marked with <sup>(alloc)</sup> can be used in `no_std` environments, but only if `alloc`
+feature is enabled.*
+
+[`AtomicCell`]: https://docs.rs/crossbeam/*/crossbeam/atomic/struct.AtomicCell.html
+[`AtomicConsume`]: https://docs.rs/crossbeam/*/crossbeam/atomic/trait.AtomicConsume.html
+[`deque`]: https://docs.rs/crossbeam/*/crossbeam/deque/index.html
+[`ArrayQueue`]: https://docs.rs/crossbeam/*/crossbeam/queue/struct.ArrayQueue.html
+[`SegQueue`]: https://docs.rs/crossbeam/*/crossbeam/queue/struct.SegQueue.html
+[`channel`]: https://docs.rs/crossbeam/*/crossbeam/channel/index.html
+[`Parker`]: https://docs.rs/crossbeam/*/crossbeam/sync/struct.Parker.html
+[`ShardedLock`]: https://docs.rs/crossbeam/*/crossbeam/sync/struct.ShardedLock.html
+[`WaitGroup`]: https://docs.rs/crossbeam/*/crossbeam/sync/struct.WaitGroup.html
+[`epoch`]: https://docs.rs/crossbeam/*/crossbeam/epoch/index.html
+[`Backoff`]: https://docs.rs/crossbeam/*/crossbeam/utils/struct.Backoff.html
+[`CachePadded`]: https://docs.rs/crossbeam/*/crossbeam/utils/struct.CachePadded.html
+[`scope`]: https://docs.rs/crossbeam/*/crossbeam/fn.scope.html
+
+## Crates
+
+The main `crossbeam` crate just [re-exports](src/lib.rs) tools from
+smaller subcrates:
+
+* [`crossbeam-channel`](crossbeam-channel)
+ provides multi-producer multi-consumer channels for message passing.
+* [`crossbeam-deque`](crossbeam-deque)
+ provides work-stealing deques, which are primarily intended for building task schedulers.
+* [`crossbeam-epoch`](crossbeam-epoch)
+ provides epoch-based garbage collection for building concurrent data structures.
+* [`crossbeam-queue`](crossbeam-queue)
+ provides concurrent queues that can be shared among threads.
+* [`crossbeam-utils`](crossbeam-utils)
+ provides atomics, synchronization primitives, scoped threads, and other utilities.
+
+There is one more experimental subcrate that is not yet included in `crossbeam`:
+
+* [`crossbeam-skiplist`](crossbeam-skiplist)
+ provides concurrent maps and sets based on lock-free skip lists.
+
+## Usage
+
+Add this to your `Cargo.toml`:
+
+```toml
+[dependencies]
+crossbeam = "0.8"
+```
+
+## Compatibility
+
+Crossbeam supports stable Rust releases going back at least six months,
+and every time the minimum supported Rust version is increased, a new minor
+version is released. Currently, the minimum supported Rust version is 1.36.
+
+## Contributing
+
+Crossbeam welcomes contribution from everyone in the form of suggestions, bug reports,
+pull requests, and feedback. 💛
+
+If you need ideas for contribution, there are several ways to get started:
+
+* Found a bug or have a feature request?
+ [Submit an issue](https://github.com/crossbeam-rs/crossbeam/issues/new)!
+* Issues and PRs labeled with
+ [feedback wanted](https://github.com/crossbeam-rs/crossbeam/issues?utf8=%E2%9C%93&q=is%3Aopen+sort%3Aupdated-desc+label%3A%22feedback+wanted%22+)
+ need feedback from users and contributors.
+* Issues labeled with
+ [good first issue](https://github.com/crossbeam-rs/crossbeam/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22good+first+issue%22)
+ are relatively easy starter issues.
+
+#### RFCs
+
+We also have the [RFCs](https://github.com/crossbeam-rs/rfcs) repository for more
+high-level discussion, which is the place where we brainstorm ideas and propose
+substantial changes to Crossbeam.
+
+You are welcome to participate in any open
+[issues](https://github.com/crossbeam-rs/rfcs/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc)
+or
+[pull requests](https://github.com/crossbeam-rs/rfcs/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc).
+
+#### Learning resources
+
+If you'd like to learn more about concurrency and non-blocking data structures, there's a
+list of learning resources in our [wiki](https://github.com/crossbeam-rs/rfcs/wiki),
+which includes relevant blog posts, papers, videos, and other similar projects.
+
+Another good place to visit is [merged RFCs](https://github.com/crossbeam-rs/rfcs/tree/master/text).
+They contain elaborate descriptions and rationale for features we've introduced to
+Crossbeam, but keep in mind that some of the written information is now out of date.
+
+#### Conduct
+
+The Crossbeam project adheres to the
+[Rust Code of Conduct](https://github.com/rust-lang/rust/blob/master/CODE_OF_CONDUCT.md).
+This describes the minimum behavior expected from all contributors.
+
+## License
+
+Licensed under either of
+
+ * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
+ * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
+
+at your option.
+
+Some Crossbeam subcrates have additional licensing notices.
+Take a look at other readme files in this repository for more information.
+
+#### Contribution
+
+Unless you explicitly state otherwise, any contribution intentionally submitted
+for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
+dual licensed as above, without any additional terms or conditions.
diff --git a/vendor/crossbeam/no_atomic.rs b/vendor/crossbeam/no_atomic.rs
new file mode 100644
index 000000000..522b3b8ac
--- /dev/null
+++ b/vendor/crossbeam/no_atomic.rs
@@ -0,0 +1,59 @@
+// This file is @generated by no_atomic.sh.
+// It is not intended for manual editing.
+
+const NO_ATOMIC_CAS: &[&str] = &[
+ "avr-unknown-gnu-atmega328",
+ "msp430-none-elf",
+ "riscv32i-unknown-none-elf",
+ "riscv32imc-unknown-none-elf",
+ "thumbv4t-none-eabi",
+ "thumbv6m-none-eabi",
+];
+#[allow(dead_code)]
+const NO_ATOMIC_64: &[&str] = &[
+ "arm-linux-androideabi",
+ "armebv7r-none-eabi",
+ "armebv7r-none-eabihf",
+ "armv4t-unknown-linux-gnueabi",
+ "armv5te-unknown-linux-gnueabi",
+ "armv5te-unknown-linux-musleabi",
+ "armv5te-unknown-linux-uclibceabi",
+ "armv7r-none-eabi",
+ "armv7r-none-eabihf",
+ "hexagon-unknown-linux-musl",
+ "mips-unknown-linux-gnu",
+ "mips-unknown-linux-musl",
+ "mips-unknown-linux-uclibc",
+ "mipsel-unknown-linux-gnu",
+ "mipsel-unknown-linux-musl",
+ "mipsel-unknown-linux-uclibc",
+ "mipsel-unknown-none",
+ "mipsisa32r6-unknown-linux-gnu",
+ "mipsisa32r6el-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnu",
+ "powerpc-unknown-linux-gnuspe",
+ "powerpc-unknown-linux-musl",
+ "powerpc-unknown-netbsd",
+ "powerpc-unknown-openbsd",
+ "powerpc-wrs-vxworks",
+ "powerpc-wrs-vxworks-spe",
+ "riscv32gc-unknown-linux-gnu",
+ "riscv32gc-unknown-linux-musl",
+ "riscv32imac-unknown-none-elf",
+ "thumbv7em-none-eabi",
+ "thumbv7em-none-eabihf",
+ "thumbv7m-none-eabi",
+ "thumbv8m.base-none-eabi",
+ "thumbv8m.main-none-eabi",
+ "thumbv8m.main-none-eabihf",
+ "mipsel-sony-psp",
+ "thumbv4t-none-eabi",
+ "thumbv6m-none-eabi",
+];
+#[allow(dead_code)]
+const NO_ATOMIC: &[&str] = &[
+ "avr-unknown-gnu-atmega328",
+ "msp430-none-elf",
+ "riscv32i-unknown-none-elf",
+ "riscv32imc-unknown-none-elf",
+];
diff --git a/vendor/crossbeam/src/lib.rs b/vendor/crossbeam/src/lib.rs
new file mode 100644
index 000000000..9bc3ec111
--- /dev/null
+++ b/vendor/crossbeam/src/lib.rs
@@ -0,0 +1,96 @@
+//! Tools for concurrent programming.
+//!
+//! ## Atomics
+//!
+//! * [`AtomicCell`], a thread-safe mutable memory location.
+//! * [`AtomicConsume`], for reading from primitive atomic types with "consume" ordering.
+//!
+//! ## Data structures
+//!
+//! * [`deque`], work-stealing deques for building task schedulers.
+//! * [`ArrayQueue`], a bounded MPMC queue that allocates a fixed-capacity buffer on construction.
+//! * [`SegQueue`], an unbounded MPMC queue that allocates small buffers, segments, on demand.
+//!
+//! ## Memory management
+//!
+//! * [`epoch`], an epoch-based garbage collector.
+//!
+//! ## Thread synchronization
+//!
+//! * [`channel`], multi-producer multi-consumer channels for message passing.
+//! * [`Parker`], a thread parking primitive.
+//! * [`ShardedLock`], a sharded reader-writer lock with fast concurrent reads.
+//! * [`WaitGroup`], for synchronizing the beginning or end of some computation.
+//!
+//! ## Utilities
+//!
+//! * [`Backoff`], for exponential backoff in spin loops.
+//! * [`CachePadded`], for padding and aligning a value to the length of a cache line.
+//! * [`scope`], for spawning threads that borrow local variables from the stack.
+//!
+//! [`AtomicCell`]: atomic::AtomicCell
+//! [`AtomicConsume`]: atomic::AtomicConsume
+//! [`ArrayQueue`]: queue::ArrayQueue
+//! [`SegQueue`]: queue::SegQueue
+//! [`Parker`]: sync::Parker
+//! [`ShardedLock`]: sync::ShardedLock
+//! [`WaitGroup`]: sync::WaitGroup
+//! [`Backoff`]: utils::Backoff
+//! [`CachePadded`]: utils::CachePadded
+
+#![doc(test(
+ no_crate_inject,
+ attr(
+ deny(warnings, rust_2018_idioms),
+ allow(dead_code, unused_assignments, unused_variables)
+ )
+))]
+#![warn(
+ missing_docs,
+ missing_debug_implementations,
+ rust_2018_idioms,
+ unreachable_pub
+)]
+#![cfg_attr(not(feature = "std"), no_std)]
+
+pub use crossbeam_utils::atomic;
+
+pub mod utils {
+ //! Miscellaneous utilities.
+ //!
+ //! * [`Backoff`], for exponential backoff in spin loops.
+ //! * [`CachePadded`], for padding and aligning a value to the length of a cache line.
+
+ pub use crossbeam_utils::Backoff;
+ pub use crossbeam_utils::CachePadded;
+}
+
+use cfg_if::cfg_if;
+
+cfg_if! {
+ if #[cfg(feature = "alloc")] {
+ #[doc(inline)]
+ pub use crossbeam_epoch as epoch;
+
+ #[doc(inline)]
+ pub use crossbeam_queue as queue;
+ }
+}
+
+cfg_if! {
+ if #[cfg(feature = "std")] {
+ #[doc(inline)]
+ pub use crossbeam_deque as deque;
+
+ #[doc(inline)]
+ pub use crossbeam_channel as channel;
+ pub use crossbeam_channel::select;
+
+ pub use crossbeam_utils::sync;
+
+ #[cfg(not(crossbeam_loom))]
+ pub use crossbeam_utils::thread;
+ #[cfg(not(crossbeam_loom))]
+ pub use crossbeam_utils::thread::scope;
+ }
+}
diff --git a/vendor/crossbeam/tests/subcrates.rs b/vendor/crossbeam/tests/subcrates.rs
new file mode 100644
index 000000000..21b99fb0e
--- /dev/null
+++ b/vendor/crossbeam/tests/subcrates.rs
@@ -0,0 +1,47 @@
+//! Makes sure subcrates are properly re-exported.
+
+use crossbeam::select;
+
+#[test]
+fn channel() {
+ let (s, r) = crossbeam::channel::bounded(1);
+
+ select! {
+ send(s, 0) -> res => res.unwrap(),
+ recv(r) -> res => assert!(res.is_ok()),
+ }
+}
+
+#[test]
+fn deque() {
+ let w = crossbeam::deque::Worker::new_fifo();
+ w.push(1);
+ let _ = w.pop();
+}
+
+#[test]
+fn epoch() {
+ crossbeam::epoch::pin();
+}
+
+#[test]
+fn queue() {
+ let a = crossbeam::queue::ArrayQueue::new(10);
+ let _ = a.push(1);
+ let _ = a.pop();
+}
+
+#[test]
+fn utils() {
+ crossbeam::utils::CachePadded::new(7);
+
+ crossbeam::scope(|scope| {
+ scope.spawn(|_| ());
+ })
+ .unwrap();
+
+ crossbeam::thread::scope(|scope| {
+ scope.spawn(|_| ());
+ })
+ .unwrap();
+}