[mythtv] [PATCH] Possible fix for mutex destroy failure problem

Jason Gillis jgillis at acm.org
Sat Apr 9 03:22:05 UTC 2005


Hi,

I've worked up a possible fix for the "Mutex destroy failure" problem on the 
master backend that comes up when a slave backend disconnects at the wrong 
time.

What is happening is that MainServer::endConnection() is destroying the 
PlaybackSock instance before the PlaybackSock::SendReceiveStringList() 
function is able to return.  Once control goes back to 
PlaybackSock::SendReceiveStringList(), all the resources have been deleted 
with the object instance, so a seg fault occurs.

This patch attempts the following:
    o  Adds a isBusy() method to PlaybackSock
    o  Adds a markForDestruction() method to PlaybackSock
    o  Adds a signal to PlaybackSock (destroyConnect) to allow it to notify 
MainServer that it is ready to be deleted
    o  Teaches MainServer::endConnection() about the possibility that a 
PlaybackSock could be busy.  In that case, call (*it)->markForDestruction() 
to let the PlaybackSock know that it should emit it's signal next time it 
has a chance.
    o  Teaches PlaybackSock::SendReceiveStringList() to 
emit(destroyConnect(sock)) when it sees that it's marked for destruction

The only problem that I've seen in testing is the following mythbackend 
output from Qt:

        ASSERT: "i <= nodes" in /usr/qt/3/include/qvaluelist.h (373)

Obviously, someone is getting removed somewhere and not telling the right 
people, but I'm not able to track it down.

In any case, the patch does resolve the seg fault problem for the specific 
case I tested (slave disconnects before responding to QUERY_FREESPACE), so 
maybe it's a good place to start.

Jason 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mutexdestroy.patch
Type: application/octet-stream
Size: 6005 bytes
Desc: not available
Url : http://mythtv.org/pipermail/mythtv-dev/attachments/20050408/92a9e29d/mutexdestroy.obj


More information about the mythtv-dev mailing list