diff options
| author | Ben Blum <bblum@andrew.cmu.edu> | 2013-07-22 20:14:15 -0400 |
|---|---|---|
| committer | Ben Blum <bblum@andrew.cmu.edu> | 2013-07-30 13:19:25 -0400 |
| commit | fa8102ab4afc4deba80344f4a2fdb5861cbe394f (patch) | |
| tree | 85acffb6b6c1e8a36039d49973d14de830a69c41 /src/libextra | |
| parent | 9675cd311a405bd5222597a69825733029a2a040 (diff) | |
Unkillable is not unsafe. Close #7832.
Diffstat (limited to 'src/libextra')
| -rw-r--r-- | src/libextra/sync.rs | 48 |
1 files changed, 20 insertions, 28 deletions
diff --git a/src/libextra/sync.rs b/src/libextra/sync.rs index 743c4347a4b..47fd4cccb9f 100644 --- a/src/libextra/sync.rs +++ b/src/libextra/sync.rs @@ -130,11 +130,9 @@ impl<Q:Send> Sem<Q> { impl Sem<()> { pub fn access<U>(&self, blk: &fn() -> U) -> U { let mut release = None; - unsafe { - do task::unkillable { - self.acquire(); - release = Some(SemRelease(self)); - } + do task::unkillable { + self.acquire(); + release = Some(SemRelease(self)); } blk() } @@ -153,11 +151,9 @@ impl Sem<~[WaitQueue]> { pub fn access_waitqueue<U>(&self, blk: &fn() -> U) -> U { let mut release = None; - unsafe { - do task::unkillable { - self.acquire(); - release = Some(SemAndSignalRelease(self)); - } + do task::unkillable { + self.acquire(); + release = Some(SemAndSignalRelease(self)); } blk() } @@ -294,17 +290,15 @@ impl<'self> Condvar<'self> { #[unsafe_destructor] impl<'self> Drop for CondvarReacquire<'self> { fn drop(&self) { - unsafe { - // Needs to succeed, instead of itself dying. - do task::unkillable { - match self.order { - Just(lock) => do lock.access { - self.sem.acquire(); - }, - Nothing => { - self.sem.acquire(); - }, - } + // Needs to succeed, instead of itself dying. + do task::unkillable { + match self.order { + Just(lock) => do lock.access { + self.sem.acquire(); + }, + Nothing => { + self.sem.acquire(); + }, } } } @@ -644,14 +638,12 @@ impl RWLock { // Implementation slightly different from the slicker 'write's above. // The exit path is conditional on whether the caller downgrades. let mut _release = None; - unsafe { - do task::unkillable { - (&self.order_lock).acquire(); - (&self.access_lock).acquire(); - (&self.order_lock).release(); - } - _release = Some(RWLockReleaseDowngrade(self)); + do task::unkillable { + (&self.order_lock).acquire(); + (&self.access_lock).acquire(); + (&self.order_lock).release(); } + _release = Some(RWLockReleaseDowngrade(self)); blk(RWLockWriteMode { lock: self }) } |
