I just hit the below assert on line 138 stepping over a dlclose().

120| bool
121| DYLDRendezvous::UpdateSOEntries()
122| {
123|     SOEntry entry;
124|
125|     if (m_current.map_addr == 0)
126|         return false;
127|
128|     // When the previous and current states are consistent this is the
first
129|     // time we have been asked to update.  Just take a snapshot of the
currently
130|     // loaded modules.
131|     if (m_previous.state == eConsistent && m_current.state ==
eConsistent)
132|         return TakeSnapshot(m_soentries);
133|
134|     // If we are about to add or remove a shared object clear out the
current
135|     // state and take a snapshot of the currently loaded images.
136|     if (m_current.state == eAdd || m_current.state == eDelete)
137|     {
138+>        assert(m_previous.state == eConsistent);
139|         m_soentries.clear();
140|         m_added_soentries.clear();
141|         m_removed_soentries.clear();
142|         return TakeSnapshot(m_soentries);
143|     }

It's called by this code in DYLDRendezvous::Resolve():

106|     // The rendezvous was successfully read.  Update our internal
state.
107|     m_rendezvous_addr = info_addr;
108|     m_previous = m_current;
109|     m_current = info;
110|
111+>    return UpdateSOEntries();

m_previous is being set to m_current and both are eDelete now, but that
assert above is claiming it should be eConsistent.

Is this a bogus assert, or is the Resolve() function messing with
m_previous when it shouldn't be?
 -Mike
_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to