gnustep-dev
[Top][All Lists]
Advanced

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

Re: Do gui applications always have 2 threads ?


From: Philippe Roussel
Subject: Re: Do gui applications always have 2 threads ?
Date: Sat, 22 Jan 2011 22:53:07 +0100

Le samedi 22 janvier 2011 à 21:11 +0000, David Chisnall a écrit :
> On 22 Jan 2011, at 20:54, Philippe Roussel wrote:
> 
> > Hi all,
> > 
> > In trying to understand why my application randomly blocks, I found that
> > it always has 2 threads running and I don't know what the second one is
> > for.
> > 
> > It seems this thread is waiting on some condition lock :
> > 
> > #0  0xb7fe2424 in __kernel_vsyscall ()
> > #1  0xb7428015 in pthread_cond_wait@@GLIBC_2.3.2 () at 
> > ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_wait.S:122
> > #2  0xb76639dd in __pthread_cond_wait (cond=0x80de870, mutex=0x80de858) at 
> > forward.c:139
> > #3  0xb771d14f in ?? () from 
> > /opt/GNUstep-trunk/Local/Library/Libraries/libobjc.so.4
> 
> Here, libobjc2 created this thread.  It exists to do cleanup on some data 
> structures.  
> 
> > Once I saw my main thread blocked on the same condition/mutex (I think
> > it was load_lock in NSBundle) : deadlock.
> 
> It shouldn't ever be blocking on that lock.  It's only ever used to
> pass off work to the background thread's queue.  If you're making a
> huge number of changes to runtime data structures then you might end
> up with this queue becoming full and the second thread having to do
> some work before the first is allowed to proceed, but it's quite
> unlikely.
> 
> It's not exposed outside of the runtime, so I'm a bit surprised if
> this is really the cause of your problem.  This thread is expected to
> spend almost all of its time asleep.  If you have libdispatch
> installed it won't exist at all.

Well, I must have misread the backtraces. The application blocks but
it's not a deadlock with this libobjc2 thread, sorry about that. I'll
have to dig deeper.

> > I'm wondering if my code is responsible by doing too much work in
> > +initialize methods (ie creating singleton).
> 
> Nope, should be fine.

Ok, thanks for the explanations David

Philippe




reply via email to

[Prev in Thread] Current Thread [Next in Thread]