diff options
Diffstat (limited to 'core/resources.rs')
-rw-r--r-- | core/resources.rs | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/core/resources.rs b/core/resources.rs index ee9ee689f..164c377a2 100644 --- a/core/resources.rs +++ b/core/resources.rs @@ -291,6 +291,12 @@ impl ResourceTable { /// If a resource with the given `rid` exists but its type does not match `T`, /// it is not removed from the resource table. Note that the resource's /// `close()` method is *not* called. + /// + /// Also note that there might be a case where + /// the returned `Rc<T>` is referenced by other variables. That is, we cannot + /// assume that `Rc::strong_count(&returned_rc)` is always equal to 1 on success. + /// In particular, be really careful when you want to extract the inner value of + /// type `T` from `Rc<T>`. pub fn take<T: Resource>(&mut self, rid: ResourceId) -> Result<Rc<T>, Error> { let resource = self.get::<T>(rid)?; self.index.remove(&rid); @@ -299,6 +305,12 @@ impl ResourceTable { /// Removes a resource from the resource table and returns it. Note that the /// resource's `close()` method is *not* called. + /// + /// Also note that there might be a + /// case where the returned `Rc<T>` is referenced by other variables. That is, + /// we cannot assume that `Rc::strong_count(&returned_rc)` is always equal to 1 + /// on success. In particular, be really careful when you want to extract the + /// inner value of type `T` from `Rc<T>`. pub fn take_any( &mut self, rid: ResourceId, |