about summary refs log tree commit diff
path: root/src/libstd/sync
diff options
context:
space:
mode:
authorJonathan Reem <jonathan.reem@gmail.com>2016-02-05 17:11:17 -0800
committerJonathan Reem <jonathan.reem@gmail.com>2016-02-05 19:04:04 -0800
commitad73330391d7b608e6650cb83dc76d5eeb1919ed (patch)
treed7df60d5207f90ed3a8f0d098116a91fc37b6471 /src/libstd/sync
parent34af2de4096b3b1c5d3a5b70171c6e27822aaefb (diff)
downloadrust-ad73330391d7b608e6650cb83dc76d5eeb1919ed.tar.gz
rust-ad73330391d7b608e6650cb83dc76d5eeb1919ed.zip
Fix RwLock*Guard::map to not allow escaping a reference to the data.
Also update the instability reason to include a note about a possible
bad interaction with condition variables on systems that allow
waiting on a RwLock guard.
Diffstat (limited to 'src/libstd/sync')
-rw-r--r--src/libstd/sync/rwlock.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/libstd/sync/rwlock.rs b/src/libstd/sync/rwlock.rs
index 1ecc8974369..fd538d52fb2 100644
--- a/src/libstd/sync/rwlock.rs
+++ b/src/libstd/sync/rwlock.rs
@@ -454,10 +454,11 @@ impl<'rwlock, T: ?Sized> RwLockReadGuard<'rwlock, T> {
     /// assert_eq!(*y, 1);
     /// ```
     #[unstable(feature = "guard_map",
-               reason = "recently added, needs RFC for stabilization",
+               reason = "recently added, needs RFC for stabilization,
+                         questionable interaction with Condvar",
                issue = "27746")]
     pub fn map<U: ?Sized, F>(this: Self, cb: F) -> RwLockReadGuard<'rwlock, U>
-        where F: FnOnce(&'rwlock T) -> &'rwlock U
+        where F: FnOnce(&T) -> &U
     {
         let new = RwLockReadGuard {
             __lock: this.__lock,
@@ -504,10 +505,11 @@ impl<'rwlock, T: ?Sized> RwLockWriteGuard<'rwlock, T> {
     /// assert_eq!(&**x.read().unwrap(), &[10, 2]);
     /// ```
     #[unstable(feature = "guard_map",
-               reason = "recently added, needs RFC for stabilization",
+               reason = "recently added, needs RFC for stabilization,
+                         questionable interaction with Condvar",
                issue = "27746")]
     pub fn map<U: ?Sized, F>(this: Self, cb: F) -> RwLockWriteGuard<'rwlock, U>
-        where F: FnOnce(&'rwlock mut T) -> &'rwlock mut U
+        where F: FnOnce(&mut T) -> &mut U
     {
         // Compute the new data while still owning the original lock
         // in order to correctly poison if the callback panics.