<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>