Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The bug is fixed by locking a Layout for updates while a
RecursiveShapeIterator
is active. Also,RecursiveInstanceIterator
behaves the same.Layout updates are responsible for recomputing cell bounding boxes, annotating hierarchies (e.g. computing parent instances, top cells and hierarchy-ordering of cells) and quad tree building.
While a Layout is locked,
Layout#under_construction
will return true. Layouts in that state can be written, but reading the mentioned information may not render the actual state.A
RecursiveShapeIterator
will lock the layout it is on once it delivered the first item. The lock is released when it reaches end.This has one consequence when coding scripts in Ruby: as in Ruby, the lifetime of an object is extended until the garbage collector removes it, pending instances of
RecursiveShapeIterator
may lock the layout and updates will not happen.To mitigate this,
_destroy
can be use to explicitly remove the iterator when it is not used any longer.On Python, this situation arises, if the iterator is kept in a variable. The iterator releases the lock when it gets destroyed - this happens when such a variable goes out of scope or is reassigned.