about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAskar Safin <safinaskar@mail.ru>2025-02-11 10:21:17 +0300
committerAskar Safin <safinaskar@mail.ru>2025-02-11 10:21:17 +0300
commit02406903b0c26440428580a4bbaf30da973c5b23 (patch)
tree477bc2325301a608d0ae17b3efb8cb80a684870e
parent51f49d84649d27af91e9fc8f6aac319be100cecd (diff)
downloadrust-02406903b0c26440428580a4bbaf30da973c5b23.tar.gz
rust-02406903b0c26440428580a4bbaf30da973c5b23.zip
compiler/rustc_data_structures/src/sync/worker_local.rs: delete "unsafe impl Sync"
-rw-r--r--compiler/rustc_data_structures/src/sync/worker_local.rs11
1 files changed, 5 insertions, 6 deletions
diff --git a/compiler/rustc_data_structures/src/sync/worker_local.rs b/compiler/rustc_data_structures/src/sync/worker_local.rs
index d75af009850..402ec9827bb 100644
--- a/compiler/rustc_data_structures/src/sync/worker_local.rs
+++ b/compiler/rustc_data_structures/src/sync/worker_local.rs
@@ -106,12 +106,6 @@ pub struct WorkerLocal<T> {
     registry: Registry,
 }
 
-// This is safe because the `deref` call will return a reference to a `T` unique to each thread
-// or it will panic for threads without an associated local. So there isn't a need for `T` to do
-// it's own synchronization. The `verify` method on `RegistryId` has an issue where the id
-// can be reused, but `WorkerLocal` has a reference to `Registry` which will prevent any reuse.
-unsafe impl<T: Send> Sync for WorkerLocal<T> {}
-
 impl<T> WorkerLocal<T> {
     /// Creates a new worker local where the `initial` closure computes the
     /// value this worker local should take for each thread in the registry.
@@ -138,6 +132,11 @@ impl<T> Deref for WorkerLocal<T> {
     fn deref(&self) -> &T {
         // This is safe because `verify` will only return values less than
         // `self.registry.thread_limit` which is the size of the `self.locals` array.
+
+        // The `deref` call will return a reference to a `T` unique to each thread
+        // or it will panic for threads without an associated local. So there isn't a need for `T` to do
+        // it's own synchronization. The `verify` method on `RegistryId` has an issue where the id
+        // can be reused, but `WorkerLocal` has a reference to `Registry` which will prevent any reuse.
         unsafe { &self.locals.get_unchecked(self.registry.id().verify()).0 }
     }
 }