You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asyncband.apache.org by ti...@apache.org on 2026/09/04 03:56:26 UTC

(asyncband) branch main updated: fix: correct third-party licensing (#275)

This is an automated email from the ASF dual-hosted git repository.

tisonkun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/asyncband.git


The following commit(s) were added to refs/heads/main by this push:
     new dd14ff0  fix: correct third-party licensing (#275)
dd14ff0 is described below

commit dd14ff09fb8ed8fdeab5405ad0ca100e11e79449
Author: tison <wa...@gmail.com>
AuthorDate: Fri Sep 4 11:56:22 2026 +0800

    fix: correct third-party licensing (#275)
---
 CHANGELOG.md                                       |  11 +-
 HISTORY.md                                         |  17 ++--
 LICENSE                                            | 112 +++++++++++++++++++++
 README.md                                          |   2 +-
 RELEASE.md                                         |   2 +-
 asyncband/src/blocking/mod.rs                      |   9 +-
 asyncband/src/blocking/parker.rs                   |   5 +-
 asyncband/src/internal/atomic_waker.rs             |   7 +-
 asyncband/src/mutex/mod.rs                         |   3 +
 asyncband/src/oneshot/mod.rs                       |   6 +-
 asyncband/src/oneshot/receiver.rs                  |   3 +
 asyncband/src/oneshot/sender.rs                    |   3 +
 asyncband/src/oneshot/tests.rs                     |   3 +
 asyncband/src/pool/bounded.rs                      |   4 +
 asyncband/src/pool/common.rs                       |   4 +
 asyncband/src/pool/mod.rs                          |   4 +
 asyncband/src/pool/state.rs                        |   4 +
 asyncband/src/pool/unbounded.rs                    |   4 +
 asyncband/src/rwlock/mapped_read_guard.rs          |   3 +
 asyncband/src/rwlock/mapped_write_guard.rs         |   3 +
 asyncband/src/rwlock/mod.rs                        |   3 +
 asyncband/src/rwlock/owned_mapped_read_guard.rs    |   3 +
 asyncband/src/rwlock/owned_mapped_write_guard.rs   |   3 +
 asyncband/src/rwlock/owned_read_guard.rs           |   3 +
 asyncband/src/rwlock/owned_write_guard.rs          |   3 +
 asyncband/src/rwlock/read_guard.rs                 |   3 +
 asyncband/src/rwlock/write_guard.rs                |   3 +
 tests-integration/tests/oneshot_test/main.rs       |   3 +
 .../tests/pool_recycle_cancelled_test.rs           |   4 +
 tests-integration/tests/pool_replenish_test.rs     |   4 +
 30 files changed, 211 insertions(+), 30 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 40243a7..a4b1949 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,14 +2,6 @@
 
 All notable changes to this project will be documented in this file.
 
-## Unreleased
-
-### Improvements
-
-* Avoid fixed CPU spinning before registering `WaitGroup`, `Latch`, and `Once` waiters.
-* Specialize `WaitGroup`'s one-shot completion state to reduce handle registration and multi-waiter notification overhead while preserving cancellable multi-observer waits.
-* Reduce waiter state and notification overhead across `Barrier`, broadcast, completion, `Latch`, `Once`, and watch by reusing each primitive's existing lifecycle state instead of maintaining duplicate waiter epochs.
-
 ## v0.7.0
 
 ### Breaking changes
@@ -49,3 +41,6 @@ All notable changes to this project will be documented in this file.
 * Reduce semaphore and mutex hot-path overhead by avoiding wake-buffer allocation when no tasks are queued and batching queued wakes on the stack.
 * Allocate `OnceMap` and `singleflight::Group` registries lazily to reduce construction overhead.
 * Describe disconnected channel states consistently in channel error messages.
+* Avoid fixed CPU spinning before registering `WaitGroup`, `Latch`, and `Once` waiters.
+* Specialize `WaitGroup`'s one-shot completion state to reduce handle registration and multi-waiter notification overhead while preserving cancellable multi-observer waits.
+* Reduce waiter state and notification overhead across `Barrier`, broadcast, completion, `Latch`, `Once`, and watch by reusing each primitive's existing lifecycle state instead of maintaining duplicate waiter epochs.
diff --git a/HISTORY.md b/HISTORY.md
index 56b13c6..51da90a 100644
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -1,16 +1,17 @@
 # History
 
-Asyncband collects composable, runtime-agnostic concurrency building blocks informed by several existing implementations. Only components that draw on external designs or code are listed here.
+Asyncband collects composable, runtime-agnostic concurrency building blocks informed by several existing implementations. Only components that draw on external designs or code are listed here. The terms `derived`, `adapted`, and `ported` identify incorporated source code; `inspired`, `informed`, and `reimplementation` identify independent implementations drawing on designs or APIs. See [LICENSE](LICENSE) for the governing terms and exact file scope of incorporated third-party code.
 
 - `barrier::Barrier` is inspired by [`std::sync::Barrier`](https://doc.rust-lang.org/std/sync/struct.Barrier.html) and [`tokio::sync::Barrier`](https://docs.rs/tokio/latest/tokio/sync/struct.Barrier.html), with a different implementation based on the internal `WaitSet` primitive.
-- The single-future polling loop in `blocking` is adapted from [`pollster`](https://github.com/zesterer/pollster), its parker caching strategy follows [`futures-lite`](https://github.com/smol-rs/futures-lite), and its private parker state machine is adapted from [`parking`](https://github.com/smol-rs/parking) 2.2.1.
+- The single-future polling loop in `blocking` is adapted from [`pollster` 1.0.1](https://github.com/zesterer/pollster/blob/6a1a148208326e9c5b231b16f199f5227c550774/src/lib.rs), its reuse of a thread-local `Parker`/`Waker` pair with a fresh pair for recursive calls is adapted from [`futures-lite` 2.6.1](https://github.com/smol-rs/futures-lite/blob/226ce18976d8714d6bd9700b61dcc81d7200bc9a/src/future.rs#L62-L91), and its private parker state machine is adapted from [`parking` 2.2.1](https: [...]
 - `condvar::Condvar` is inspired by [`std::sync::Condvar`](https://doc.rust-lang.org/std/sync/struct.Condvar.html) and [`async_std::sync::Condvar`](https://docs.rs/async-std/latest/async_std/sync/struct.Condvar.html), with a fair FIFO waiter queue and standard non-buffered notification semantics.
 - `latch::Latch` is inspired by [`latches`](https://github.com/mirromutth/latches), with a different implementation based on the internal `CountdownState` primitive.
-- `mutex::Mutex` is derived from [`tokio::sync::Mutex`](https://docs.rs/tokio/latest/tokio/sync/struct.Mutex.html).
-- `once::OnceCell` is derived from [`tokio::sync::OnceCell`](https://docs.rs/tokio/latest/tokio/sync/struct.OnceCell.html), but uses Asyncband's semaphore implementation.
-- `once::OnceMap` is inspired by [`uv-once-map`](https://github.com/astral-sh/uv/tree/main/crates/uv-once-map), with a redesigned interface and implementation.
+- `mutex::Mutex` is derived from [`tokio::sync::Mutex` in Tokio 1.41.0](https://github.com/tokio-rs/tokio/blob/01e04daaa162ce6122bb894fdda0b6803dd32093/tokio/src/sync/mutex.rs).
+- The internal `AtomicWaker` state machine is derived from [`futures-rs` 0.3.34](https://github.com/rust-lang/futures-rs/blob/705e6b5c0f06535b1aac1cb1989a172b3d45be8c/futures-core/src/task/__internal/atomic_waker.rs), with panic recovery informed by [`tokio::sync::task::AtomicWaker`](https://github.com/tokio-rs/tokio/blob/75fef53d0a8590c2d1dbb63672aa7b7d1ef51155/tokio/src/sync/task/atomic_waker.rs) in Tokio 1.53.1.
+- `once::OnceCell` has an API informed by [`tokio::sync::OnceCell`](https://docs.rs/tokio/latest/tokio/sync/struct.OnceCell.html), with an independent implementation based on Asyncband's semaphore and value storage.
+- `once::OnceMap` is inspired by [`uv-once-map`](https://github.com/astral-sh/uv/tree/936e6cdc42f44365e087a4ba7148238afc090b0b/crates/uv-once-map), with a redesigned interface and implementation.
 - `oneshot::channel` is derived from the [`oneshot`](https://github.com/faern/oneshot) crate, with significant simplifications because Asyncband does not provide synchronized receive operations.
-- `pool` is ported from [`fastpool`](https://github.com/fast/fastpool), which is derived from [`deadpool`](https://github.com/bikeshedder/deadpool), while keeping Fastpool's runtime-agnostic design and caller-side timeout composition.
-- `rwlock::RwLock` is derived from [`tokio::sync::RwLock`](https://docs.rs/tokio/latest/tokio/sync/struct.RwLock.html), but accepts any `NonZeroUsize` as `max_readers` instead of Tokio's restricted range.
-- `semaphore::Semaphore` is derived from [`tokio::sync::Semaphore`](https://docs.rs/tokio/latest/tokio/sync/struct.Semaphore.html), but omits `close`, avoids Tokio's fixed maximum-permit constant, and adds operations such as `reduce_permits` for Asyncband's use cases.
+- `pool` is ported from [`fastpool` 1.1.1](https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e), which is a reimplementation of [`deadpool`](https://github.com/deadpool-rs/deadpool), while retaining Fastpool's runtime-agnostic design and caller-side timeout composition.
+- `rwlock::RwLock` is derived from [`tokio::sync::RwLock` in Tokio 1.42.0](https://github.com/tokio-rs/tokio/blob/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock.rs), but accepts any `NonZeroUsize` as `max_readers` instead of Tokio's restricted range.
+- `semaphore::Semaphore` has an API informed by [`tokio::sync::Semaphore`](https://docs.rs/tokio/latest/tokio/sync/struct.Semaphore.html), with an independent implementation using Asyncband's waiter queue and permit accounting; it omits `close`, avoids Tokio's fixed maximum-permit constant, and adds operations such as `reduce_permits` for Asyncband's use cases.
 - `waitgroup::WaitGroup` is inspired by [`waitgroup-rs`](https://github.com/laizy/waitgroup-rs), but treats every cloned handle as an RAII participant and supports cancellable multi-observer waits.
diff --git a/LICENSE b/LICENSE
index 261eeb9..c1979b1 100644
--- a/LICENSE
+++ b/LICENSE
@@ -199,3 +199,115 @@
    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.
+
+THIRD-PARTY WORKS
+
+This product contains portions of third-party works. The paths below identify
+the files containing those portions. Modifications made for Apache Asyncband
+are licensed under the Apache License, Version 2.0, unless otherwise noted.
+
+Tokio
+
+Portions of the following files are derived from Tokio:
+
+  asyncband/src/mutex/mod.rs
+  asyncband/src/rwlock/mapped_read_guard.rs
+  asyncband/src/rwlock/mapped_write_guard.rs
+  asyncband/src/rwlock/mod.rs
+  asyncband/src/rwlock/owned_mapped_read_guard.rs
+  asyncband/src/rwlock/owned_mapped_write_guard.rs
+  asyncband/src/rwlock/owned_read_guard.rs
+  asyncband/src/rwlock/owned_write_guard.rs
+  asyncband/src/rwlock/read_guard.rs
+  asyncband/src/rwlock/write_guard.rs
+
+Portions of asyncband/src/internal/atomic_waker.rs are informed by Tokio's
+AtomicWaker implementation.
+
+The original Mutex and RwLock sources are available at:
+
+  https://github.com/tokio-rs/tokio/blob/01e04daaa162ce6122bb894fdda0b6803dd32093/tokio/src/sync/mutex.rs
+  https://github.com/tokio-rs/tokio/blob/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock.rs
+
+Tokio is licensed under the MIT License:
+
+MIT License
+
+Copyright (c) Tokio Contributors
+
+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.
+
+Works used under the Apache License, Version 2.0
+
+The Apache License, Version 2.0, reproduced above, applies to the upstream
+portions identified below. Where an upstream project offers a choice of
+Apache-2.0 or MIT, Apache Asyncband uses the Apache-2.0 option.
+
+Portions of the following files are derived from the oneshot crate at commit
+83fd0864be7289067ce96cc79cd96c0928742979:
+
+  asyncband/src/oneshot/mod.rs
+  asyncband/src/oneshot/receiver.rs
+  asyncband/src/oneshot/sender.rs
+  asyncband/src/oneshot/tests.rs
+  tests-integration/tests/oneshot_test/main.rs
+
+The oneshot crate is available from https://github.com/faern/oneshot and is
+licensed under Apache-2.0 or MIT.
+
+Portions of asyncband/src/internal/atomic_waker.rs are derived from futures-rs
+0.3.34 at commit 705e6b5c0f06535b1aac1cb1989a172b3d45be8c, available from
+https://github.com/rust-lang/futures-rs and licensed under Apache-2.0 or MIT:
+
+  Copyright (c) 2016 Alex Crichton
+  Copyright (c) 2017 The Tokio Authors
+
+The polling loop in asyncband/src/blocking/mod.rs is adapted from Pollster 1.0.1
+at commit 6a1a148208326e9c5b231b16f199f5227c550774. Its reuse of a thread-local
+Parker/Waker pair, with a fresh pair for recursive calls, is adapted from
+futures-lite 2.6.1 at commit 226ce18976d8714d6bd9700b61dcc81d7200bc9a.
+Pollster is available from https://github.com/zesterer/pollster and is
+licensed under Apache-2.0 or MIT:
+
+  Copyright (c) 2020-2021 Joshua Barretto
+
+futures-lite is available from https://github.com/smol-rs/futures-lite and is
+licensed under Apache-2.0 or MIT.
+
+Portions of asyncband/src/blocking/parker.rs are adapted from parking 2.2.1 at
+commit 0ece32dbfd6cd1bc1510ede6ed56acb772edf83f, available from
+https://github.com/smol-rs/parking and licensed under Apache-2.0 or MIT:
+
+  Copyright 2014-2020 The Rust Project Developers
+
+Portions of the following files are ported from Fastpool 1.1.1 at commit
+e4c65f1ed38395abc58d68eda8bd09925c13028e:
+
+  asyncband/src/pool/bounded.rs
+  asyncband/src/pool/common.rs
+  asyncband/src/pool/mod.rs
+  asyncband/src/pool/state.rs
+  asyncband/src/pool/unbounded.rs
+  tests-integration/tests/pool_recycle_cancelled_test.rs
+  tests-integration/tests/pool_replenish_test.rs
+
+Fastpool is available from https://github.com/fast/fastpool and is licensed
+under Apache-2.0:
+
+  Copyright 2025 FastLabs Developers
diff --git a/README.md b/README.md
index 20f97d8..eeedab7 100644
--- a/README.md
+++ b/README.md
@@ -131,7 +131,7 @@ The policy is that the minimum Rust version required to use this crate can be in
 
 ## License and Trademarks
 
-This project is licensed under [Apache License, Version 2.0](LICENSE).
+This project is licensed under [Apache License, Version 2.0](LICENSE); the license file also identifies incorporated third-party works and their terms.
 
 Apache Asyncband, Asyncband, and Apache are either registered trademarks or trademarks of The Apache Software Foundation in the United States and/or other countries.
 
diff --git a/RELEASE.md b/RELEASE.md
index aea1fbb..ce699d8 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -133,7 +133,7 @@ VERIFY_DIR="$(mktemp -d)"
 rm -rf "${VERIFY_DIR}"
 ```
 
-Inspect the archive for unexpected binary files, verify `LICENSE`, `NOTICE`, and `DISCLAIMER`, and compare its contents with the RC tag.
+Inspect the archive for unexpected binary files and compare its contents with the RC tag. Read `LICENSE` and `NOTICE` against the bundled and derived third-party works and their source-file notices; the presence of those files and a successful automated header scan are not sufficient verification.
 
 ## 4. Stage the candidate on ASF infrastructure
 
diff --git a/asyncband/src/blocking/mod.rs b/asyncband/src/blocking/mod.rs
index d0ba202..eb04301 100644
--- a/asyncband/src/blocking/mod.rs
+++ b/asyncband/src/blocking/mod.rs
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// The polling loop is adapted from Pollster 1.0.1. Reusing a thread-local Parker/Waker pair and
+// creating a fresh pair for recursive calls is adapted from futures-lite 2.6.1:
+// https://github.com/zesterer/pollster/blob/6a1a148208326e9c5b231b16f199f5227c550774/src/lib.rs
+// https://github.com/smol-rs/futures-lite/blob/226ce18976d8714d6bd9700b61dcc81d7200bc9a/src/future.rs#L62-L91
+
 //! Synchronous interoperability for runtime-agnostic futures.
 //!
 //! This module bridges synchronous Rust code to a single future. Enable it with the opt-in
@@ -148,8 +153,8 @@ fn parker_and_waker() -> (Parker, Waker) {
 }
 
 thread_local! {
-    // This cache follows futures-lite's block_on design. Holding the mutable borrow while polling
-    // makes a recursive call take the fresh-parker path instead of sharing a notification token.
+    // Holding the mutable borrow while polling makes a recursive call take the fresh-parker path
+    // instead of sharing a notification token.
     static CACHE: RefCell<(Parker, Waker)> = RefCell::new(parker_and_waker());
 }
 
diff --git a/asyncband/src/blocking/parker.rs b/asyncband/src/blocking/parker.rs
index 34fe1cc..4a84943 100644
--- a/asyncband/src/blocking/parker.rs
+++ b/asyncband/src/blocking/parker.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Adapted from parking 2.2.1 at commit 0ece32dbfd6cd1bc1510ede6ed56acb772edf83f:
+// https://github.com/smol-rs/parking/blob/0ece32dbfd6cd1bc1510ede6ed56acb772edf83f/src/lib.rs#L327-L429
+
 use std::cell::Cell;
 use std::marker::PhantomData;
 use std::sync::Arc;
@@ -67,8 +70,6 @@ impl Parker {
     }
 }
 
-// This private state machine is adapted from parking 2.2.1. Copyright 2014-2020 The Rust Project
-// Developers, licensed under Apache-2.0 OR MIT: https://github.com/smol-rs/parking/tree/v2.2.1.
 impl ParkerState {
     fn park(&self, timeout: Option<Duration>) {
         // Notifications are tokens. Consuming one is the common self-wake path and needs no lock.
diff --git a/asyncband/src/internal/atomic_waker.rs b/asyncband/src/internal/atomic_waker.rs
index c14866b..39accdd 100644
--- a/asyncband/src/internal/atomic_waker.rs
+++ b/asyncband/src/internal/atomic_waker.rs
@@ -15,10 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// This state machine is derived from the futures-rs `AtomicWaker`, licensed under
-// Apache-2.0 OR MIT: https://github.com/rust-lang/futures-rs/blob/0.3.34/futures-core/src/task/__internal/atomic_waker.rs.
-// Its panic recovery is informed by Tokio's `AtomicWaker`, licensed under MIT:
-// https://github.com/tokio-rs/tokio/blob/tokio-1.53.1/tokio/src/sync/task/atomic_waker.rs.
+// Derived from futures-rs 0.3.34, with panic recovery informed by Tokio 1.53.1:
+// https://github.com/rust-lang/futures-rs/blob/705e6b5c0f06535b1aac1cb1989a172b3d45be8c/futures-core/src/task/__internal/atomic_waker.rs
+// https://github.com/tokio-rs/tokio/blob/75fef53d0a8590c2d1dbb63672aa7b7d1ef51155/tokio/src/sync/task/atomic_waker.rs
 
 use std::cell::UnsafeCell;
 use std::panic::AssertUnwindSafe;
diff --git a/asyncband/src/mutex/mod.rs b/asyncband/src/mutex/mod.rs
index e1e4934..3f38c1e 100644
--- a/asyncband/src/mutex/mod.rs
+++ b/asyncband/src/mutex/mod.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.41.0:
+// https://github.com/tokio-rs/tokio/blob/01e04daaa162ce6122bb894fdda0b6803dd32093/tokio/src/sync/mutex.rs
+
 //! An async mutex for protecting shared data.
 //!
 //! Unlike a standard mutex, this implementation is designed to work with async/await,
diff --git a/asyncband/src/oneshot/mod.rs b/asyncband/src/oneshot/mod.rs
index 64830f7..b1d4f6a 100644
--- a/asyncband/src/oneshot/mod.rs
+++ b/asyncband/src/oneshot/mod.rs
@@ -15,10 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// This implementation is derived from the `oneshot` crate [1], with significant simplifications
-// because this crate supports only asynchronous receive operations.
-//
-// [1] https://github.com/faern/oneshot/blob/83fd0864/src/lib.rs
+// Derived from the oneshot crate at commit 83fd0864:
+// https://github.com/faern/oneshot/blob/83fd0864be7289067ce96cc79cd96c0928742979/src/lib.rs
 
 //! A one-shot channel is used for sending a single message between asynchronous tasks. The
 //! [`channel`] function is used to create a [`Sender`] and [`Receiver`] pair that form the channel.
diff --git a/asyncband/src/oneshot/receiver.rs b/asyncband/src/oneshot/receiver.rs
index f1a0e1e..e437766 100644
--- a/asyncband/src/oneshot/receiver.rs
+++ b/asyncband/src/oneshot/receiver.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from the oneshot crate at commit 83fd0864:
+// https://github.com/faern/oneshot/blob/83fd0864be7289067ce96cc79cd96c0928742979/src/lib.rs
+
 use std::fmt;
 use std::mem::ManuallyDrop;
 use std::pin::Pin;
diff --git a/asyncband/src/oneshot/sender.rs b/asyncband/src/oneshot/sender.rs
index f43996b..a6dee24 100644
--- a/asyncband/src/oneshot/sender.rs
+++ b/asyncband/src/oneshot/sender.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from the oneshot crate at commit 83fd0864:
+// https://github.com/faern/oneshot/blob/83fd0864be7289067ce96cc79cd96c0928742979/src/lib.rs
+
 use std::any::type_name;
 use std::fmt;
 use std::mem::ManuallyDrop;
diff --git a/asyncband/src/oneshot/tests.rs b/asyncband/src/oneshot/tests.rs
index 84d8b28..b5cabdf 100644
--- a/asyncband/src/oneshot/tests.rs
+++ b/asyncband/src/oneshot/tests.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from the oneshot crate at commit 83fd0864:
+// https://github.com/faern/oneshot/blob/83fd0864be7289067ce96cc79cd96c0928742979/src/lib.rs
+
 use std::future::Future;
 use std::future::IntoFuture;
 use std::mem;
diff --git a/asyncband/src/pool/bounded.rs b/asyncband/src/pool/bounded.rs
index aeec3e7..dc0ff79 100644
--- a/asyncband/src/pool/bounded.rs
+++ b/asyncband/src/pool/bounded.rs
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Portions ported from Fastpool 1.1.1 at commit e4c65f1ed38395abc58d68eda8bd09925c13028e:
+// Copyright 2025 FastLabs Developers
+// https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e
+
 //! Bounded object pools.
 //!
 //! A bounded pool uses a [`ManageObject`] implementation to create, validate, and detach objects.
diff --git a/asyncband/src/pool/common.rs b/asyncband/src/pool/common.rs
index 9be4f3b..e59af4b 100644
--- a/asyncband/src/pool/common.rs
+++ b/asyncband/src/pool/common.rs
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Portions ported from Fastpool 1.1.1 at commit e4c65f1ed38395abc58d68eda8bd09925c13028e:
+// Copyright 2025 FastLabs Developers
+// https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e
+
 use std::future::Future;
 use std::time::Instant;
 
diff --git a/asyncband/src/pool/mod.rs b/asyncband/src/pool/mod.rs
index 709eead..a306627 100644
--- a/asyncband/src/pool/mod.rs
+++ b/asyncband/src/pool/mod.rs
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Portions ported from Fastpool 1.1.1 at commit e4c65f1ed38395abc58d68eda8bd09925c13028e:
+// Copyright 2025 FastLabs Developers
+// https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e
+
 //! Runtime-agnostic object pools for async Rust.
 //!
 //! This module provides a manager-created [bounded pool](bounded::Pool) and an
diff --git a/asyncband/src/pool/state.rs b/asyncband/src/pool/state.rs
index ab8670c..abf70ed 100644
--- a/asyncband/src/pool/state.rs
+++ b/asyncband/src/pool/state.rs
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Portions ported from Fastpool 1.1.1 at commit e4c65f1ed38395abc58d68eda8bd09925c13028e:
+// Copyright 2025 FastLabs Developers
+// https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e
+
 use std::collections::VecDeque;
 
 use crate::pool::ObjectStatus;
diff --git a/asyncband/src/pool/unbounded.rs b/asyncband/src/pool/unbounded.rs
index e4ac94a..0e557b1 100644
--- a/asyncband/src/pool/unbounded.rs
+++ b/asyncband/src/pool/unbounded.rs
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Portions ported from Fastpool 1.1.1 at commit e4c65f1ed38395abc58d68eda8bd09925c13028e:
+// Copyright 2025 FastLabs Developers
+// https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e
+
 //! Unbounded object pools.
 //!
 //! An unbounded pool accepts objects supplied by callers and can be used like Go's
diff --git a/asyncband/src/rwlock/mapped_read_guard.rs b/asyncband/src/rwlock/mapped_read_guard.rs
index 4d2094d..4ed3583 100644
--- a/asyncband/src/rwlock/mapped_read_guard.rs
+++ b/asyncband/src/rwlock/mapped_read_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::marker::PhantomData;
 use std::ops::Deref;
diff --git a/asyncband/src/rwlock/mapped_write_guard.rs b/asyncband/src/rwlock/mapped_write_guard.rs
index 23c05dc..4176a14 100644
--- a/asyncband/src/rwlock/mapped_write_guard.rs
+++ b/asyncband/src/rwlock/mapped_write_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::marker::PhantomData;
 use std::mem::ManuallyDrop;
diff --git a/asyncband/src/rwlock/mod.rs b/asyncband/src/rwlock/mod.rs
index 36e97ca..4b92ef9 100644
--- a/asyncband/src/rwlock/mod.rs
+++ b/asyncband/src/rwlock/mod.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0:
+// https://github.com/tokio-rs/tokio/blob/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock.rs
+
 //! A reader-writer lock that allows multiple readers or a single writer at a time.
 //!
 //! This type of lock allows a number of readers or at most one writer at any point in time. The
diff --git a/asyncband/src/rwlock/owned_mapped_read_guard.rs b/asyncband/src/rwlock/owned_mapped_read_guard.rs
index 449bcd4..369276f 100644
--- a/asyncband/src/rwlock/owned_mapped_read_guard.rs
+++ b/asyncband/src/rwlock/owned_mapped_read_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::marker::PhantomData;
 use std::mem::ManuallyDrop;
diff --git a/asyncband/src/rwlock/owned_mapped_write_guard.rs b/asyncband/src/rwlock/owned_mapped_write_guard.rs
index d34a2b8..b698ae3 100644
--- a/asyncband/src/rwlock/owned_mapped_write_guard.rs
+++ b/asyncband/src/rwlock/owned_mapped_write_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::marker::PhantomData;
 use std::mem::ManuallyDrop;
diff --git a/asyncband/src/rwlock/owned_read_guard.rs b/asyncband/src/rwlock/owned_read_guard.rs
index d902dd0..20021ac 100644
--- a/asyncband/src/rwlock/owned_read_guard.rs
+++ b/asyncband/src/rwlock/owned_read_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::ops::Deref;
 use std::sync::Arc;
diff --git a/asyncband/src/rwlock/owned_write_guard.rs b/asyncband/src/rwlock/owned_write_guard.rs
index 634dacd..fef7e3b 100644
--- a/asyncband/src/rwlock/owned_write_guard.rs
+++ b/asyncband/src/rwlock/owned_write_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::mem::ManuallyDrop;
 use std::ops::Deref;
diff --git a/asyncband/src/rwlock/read_guard.rs b/asyncband/src/rwlock/read_guard.rs
index ec70afe..78b0b5a 100644
--- a/asyncband/src/rwlock/read_guard.rs
+++ b/asyncband/src/rwlock/read_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::mem::ManuallyDrop;
 use std::ops::Deref;
diff --git a/asyncband/src/rwlock/write_guard.rs b/asyncband/src/rwlock/write_guard.rs
index d2f26b6..fa3b603 100644
--- a/asyncband/src/rwlock/write_guard.rs
+++ b/asyncband/src/rwlock/write_guard.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from Tokio 1.42.0's RwLock implementation:
+// https://github.com/tokio-rs/tokio/tree/bb9d57017e100985f86d8ca41ac105ee9140423e/tokio/src/sync/rwlock
+
 use std::fmt;
 use std::mem::ManuallyDrop;
 use std::ops::Deref;
diff --git a/tests-integration/tests/oneshot_test/main.rs b/tests-integration/tests/oneshot_test/main.rs
index 6f6265c..a930345 100644
--- a/tests-integration/tests/oneshot_test/main.rs
+++ b/tests-integration/tests/oneshot_test/main.rs
@@ -15,6 +15,9 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Derived from the oneshot crate at commit 83fd0864:
+// https://github.com/faern/oneshot/blob/83fd0864be7289067ce96cc79cd96c0928742979/src/lib.rs
+
 use std::future::Future;
 use std::future::IntoFuture;
 use std::pin::Pin;
diff --git a/tests-integration/tests/pool_recycle_cancelled_test.rs b/tests-integration/tests/pool_recycle_cancelled_test.rs
index 1bc8c60..88f3b55 100644
--- a/tests-integration/tests/pool_recycle_cancelled_test.rs
+++ b/tests-integration/tests/pool_recycle_cancelled_test.rs
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Portions ported from Fastpool 1.1.1 at commit e4c65f1ed38395abc58d68eda8bd09925c13028e:
+// Copyright 2025 FastLabs Developers
+// https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e
+
 use std::future::Future;
 use std::future::poll_fn;
 use std::pin::pin;
diff --git a/tests-integration/tests/pool_replenish_test.rs b/tests-integration/tests/pool_replenish_test.rs
index 280e7c9..8e44c40 100644
--- a/tests-integration/tests/pool_replenish_test.rs
+++ b/tests-integration/tests/pool_replenish_test.rs
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// Portions ported from Fastpool 1.1.1 at commit e4c65f1ed38395abc58d68eda8bd09925c13028e:
+// Copyright 2025 FastLabs Developers
+// https://github.com/fast/fastpool/tree/e4c65f1ed38395abc58d68eda8bd09925c13028e
+
 use std::convert::Infallible;
 use std::future::poll_fn;
 use std::sync::Arc;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@asyncband.apache.org
For additional commands, e-mail: commits-help@asyncband.apache.org