Re: Idle Function Not Getting Called



On Sat, 12 Sep 2009 00:18:59 -0400 (EDT)
Marshall Lake <mlake mlake net> wrote:
[snip]
I can't find a non-commercial deadlock checker for Linux.  I agree
that the multi-threaded facet of the code is causing my problem but
so far I'm having trouble using breakpoints/debug code to isolate the
exact cause.

The mutex locks/unlocks are only in a secondary thread and an idle 
function.  I assume there's no problems with idle functions using
mutexes?

There is no problem provided that any mutex acquired by the idle
function does not block (it immediately acquires), or if it does block
then it only does so transiently.  If the secondary thread undertakes a
lengthy operation holding a lock which the idle function may also want
to acquire, then there is a bottleneck in the code.  If at the same
time the secondary thread is waiting for the idle handler to complete,
there is a deadlock.

The important point in looking at out-of-order locking (or other
locking issues) is that the idle handler runs in the thread in which the
main program loop runs, not the thread which called g_idle_add()/
g_idle_add_full(), and that it runs at a time not of that calling
thread's choosing.

Chris



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]