diff options
author | Federico Mena Quintero <federico@gnome.org> | 2019-10-15 08:35:54 -0500 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2019-10-15 11:27:50 -0500 |
commit | 098f83df30470ca9437c19f203b6fc0af239ec89 (patch) | |
tree | 5ee22e698935942be59050d9d09ddce2a7569e5f | |
parent | 653a4b46c027d350b904f28b1a4836a6832a4356 (diff) | |
download | librsvg-098f83df30470ca9437c19f203b6fc0af239ec89.tar.gz |
AcquiredNode: store the stack as an Option.
We'll move to a model where we only push nodes that are only
accessible by reference, not all nodes that are acquired.
-rw-r--r-- | rsvg_internals/src/drawing_ctx.rs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs index a6ccc824..cc22d43e 100644 --- a/rsvg_internals/src/drawing_ctx.rs +++ b/rsvg_internals/src/drawing_ctx.rs @@ -1069,15 +1069,17 @@ impl From<RsvgRectangle> for cairo::Rectangle { } pub struct AcquiredNode { - stack: Rc<RefCell<NodeStack>>, + stack: Option<Rc<RefCell<NodeStack>>>, node: RsvgNode, } impl Drop for AcquiredNode { fn drop(&mut self) { - let mut stack = self.stack.borrow_mut(); - let last = stack.pop().unwrap(); - assert!(last == self.node); + if let Some(ref stack) = self.stack { + let mut stack = stack.borrow_mut(); + let last = stack.pop().unwrap(); + assert!(last == self.node); + } } } @@ -1141,7 +1143,7 @@ impl AcquiredNodes { } else { self.node_stack.borrow_mut().push(&node); let acquired = AcquiredNode { - stack: self.node_stack.clone(), + stack: Some(self.node_stack.clone()), node: node.clone() }; Ok(acquired) |