Преглед изворни кода

Fix recycling on component callbacks (#2247)

Jonathan Kelley пре 1 година
родитељ
комит
702509cb7e
2 измењених фајлова са 10 додато и 5 уклоњено
  1. 1 1
      packages/core/src/nodes.rs
  2. 9 4
      packages/generational-box/src/lib.rs

+ 1 - 1
packages/core/src/nodes.rs

@@ -157,7 +157,7 @@ impl Drop for VNode {
             for attrs in self.vnode.dynamic_attrs.iter() {
                 for attr in attrs.iter() {
                     if let AttributeValue::Listener(listener) = &attr.value {
-                        listener.callback.manually_drop();
+                        listener.callback.recycle();
                     }
                 }
             }

+ 9 - 4
packages/generational-box/src/lib.rs

@@ -198,12 +198,17 @@ impl<T, S: Storage<T>> GenerationalBox<T, S> {
         }
     }
 
-    /// Drop the value out of the generational box and invalidate the generational box. This will return the value if the value was taken.
+    /// Recycle the generationalbox, dropping the value.
+    pub fn recycle(&self) {
+        _ = Storage::take(&self.raw.0.data);
+        <S as AnyStorage>::recycle(&self.raw);
+    }
+
+    /// Drop the value out of the generational box and invalidate the generational box.
+    /// This will return the value if the value was taken.
     pub fn manually_drop(&self) -> Option<T> {
         if self.validate() {
-            let o = Storage::take(&self.raw.0.data);
-            <S as AnyStorage>::recycle(&self.raw);
-            o
+            Storage::take(&self.raw.0.data)
         } else {
             None
         }