I just checked in a fix to the problem that JD described (Thanks!!!!!)
This fix has to do with a circular problem calling yahoo_logoff by
something invoked by yahoo_logoff
Was was happening:
- Read error on a socket sets error status
- Read socket closed due to error
- yahoo_logoff called
- yahoo_logoff calls the callback to remove Fire's reference to the
- the callback detected that this was the last socket, so it called
- disconnect called yahoo_logoff.
Then bad things were happening, such as referencing a member of a freed
Crashing and burning ensued
Now in that same case, everything is the same until the callback to
remove the socket reference is called.
Fire now removes the reference and returns
Sometime later, a timer fires to do the run_loop_check... By this
time, the stack is unwound, and the initial call to yahoo_logoff has
Then that timer routine [YahooCommunicationController
executeRunLoopCheck] is called and detects that there are no open
sockets, so it calls disconnect....
Disconnect will (among other things) call yahoo_logoff again, but the
yahoo library is built to detect this and just return (with no crashing
This should fix that problem. (Hopefully that was the only problem
people were seeing, and this will fix all of those different (yet
strikingly similar) crashes)
Please build from CVS and try seeing if this fixes the problem.