<div dir="ltr">I just hit the below assert on line 138 stepping over a dlclose().<div><br></div><div><div><div>120| bool</div><div>121| DYLDRendezvous::UpdateSOEntries()</div><div>122| {</div><div>123|     SOEntry entry;</div>

<div>124|</div><div>125|     if (m_current.map_addr == 0)</div><div>126|         return false;</div><div>127|</div><div>128|     // When the previous and current states are consistent this is the first</div><div>129|     // time we have been asked to update.  Just take a snapshot of the currently</div>

<div>130|     // loaded modules.</div><div>131|     if (m_previous.state == eConsistent && m_current.state == eConsistent)</div><div>132|         return TakeSnapshot(m_soentries);</div><div>133|</div><div>134|     // If we are about to add or remove a shared object clear out the current</div>

<div>135|     // state and take a snapshot of the currently loaded images.</div><div>136|     if (m_current.state == eAdd || m_current.state == eDelete)</div><div>137|     {</div><div>138+>        assert(m_previous.state == eConsistent);</div>

<div>139|         m_soentries.clear();</div><div>140|         m_added_soentries.clear();</div><div>141|         m_removed_soentries.clear();</div><div>142|         return TakeSnapshot(m_soentries);</div><div>143|     }</div>

</div><div><br></div></div><div style>It's called by this code in DYLDRendezvous::Resolve():</div><div style><br></div><div style><div>106|     // The rendezvous was successfully read.  Update our internal state.</div>

<div>107|     m_rendezvous_addr = info_addr;</div><div>108|     m_previous = m_current;</div><div>109|     m_current = info;</div><div>110|</div><div>111+>    return UpdateSOEntries();</div><div><br></div><div style>m_previous is being set to m_current and both are eDelete now, but that assert above is claiming it should be eConsistent.<br>

</div><div style><br></div><div style>Is this a bogus assert, or is the Resolve() function messing with m_previous when it shouldn't be?</div><div style> -Mike</div></div></div>