summaryrefslogtreecommitdiff
path: root/core/resources.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/resources.rs')
-rw-r--r--core/resources.rs12
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,