diff --git a/src/db/db/dbRecursiveShapeIterator.cc b/src/db/db/dbRecursiveShapeIterator.cc index 5c628def1..feff72f32 100644 --- a/src/db/db/dbRecursiveShapeIterator.cc +++ b/src/db/db/dbRecursiveShapeIterator.cc @@ -67,6 +67,7 @@ RecursiveShapeIterator &RecursiveShapeIterator::operator= (const RecursiveShapeI m_box_convert = d.m_box_convert; + m_locker = d.m_locker; m_inst = d.m_inst; m_inst_array = d.m_inst_array; m_empty_cells_cache = d.m_empty_cells_cache; @@ -451,6 +452,8 @@ RecursiveShapeIterator::validate (RecursiveShapeReceiver *receiver) const m_needs_reinit = false; // re-initialize + m_locker = db::LayoutLocker (); + mp_cell = mp_top_cell; m_trans_stack.clear (); m_inst_iterators.clear (); @@ -502,6 +505,10 @@ RecursiveShapeIterator::validate (RecursiveShapeReceiver *receiver) const new_cell (receiver); next_shape (receiver); } + + if (mp_layout) { + m_locker = db::LayoutLocker (const_cast (mp_layout.get ()), true); + } } void diff --git a/src/db/db/dbRecursiveShapeIterator.h b/src/db/db/dbRecursiveShapeIterator.h index 96761a1aa..cf893be88 100644 --- a/src/db/db/dbRecursiveShapeIterator.h +++ b/src/db/db/dbRecursiveShapeIterator.h @@ -854,6 +854,7 @@ private: std::unique_ptr mp_complex_region; db::box_convert m_box_convert; + mutable db::LayoutLocker m_locker; mutable inst_iterator m_inst; mutable inst_array_iterator m_inst_array; mutable std::map m_empty_cells_cache;