How best to debug locking/scheduler problems

John Baldwin jhb at freebsd.org
Tue Jun 16 19:07:40 UTC 2009


On Tuesday 16 June 2009 1:52:23 pm Mel Flynn wrote:
> Hi John,
> 
> On Tuesday 16 June 2009 04:19:57 John Baldwin wrote:
> > On Monday 15 June 2009 5:53:05 pm Mel Flynn wrote:
> 
> > >   PID    TID COMM             TDNAME           KSTACK
> > >  4283 100215 kdeinit4         -                mi_switch turnstile_wait
> > > _mtx_lock_sleep uipc_peeraddr kern_getpeername getpeername syscall
> > > Xint0x80_syscall
> > > % ps -ww 4283
> > >   PID  TT  STAT      TIME COMMAND
> > >  4283  ??  T      0:00.38 kdeinit4: kdeinit4: kio_http http
> > > local:/tmp/ksocket-mel/klauncherxJ1635.slave-socket local:/tmp/ksocket-
> > > mel/plasmayC1653.slave-socket (kdeinit4)
> > >
> > > %ls -l /tmp/ksocket-mel/
> > >
> > > total 2
> > > -rw-rw-r--  1 mel  wheel  62 Jun 14 22:55 KSMserver__0
> > > srw-------  1 mel  wheel   0 Jun 14 22:55 kdeinit4__0
> > > srwxrwxr-x  1 mel  wheel   0 Jun 14 22:55 klauncherxJ1635.slave-socket
> >
> > You can use kgdb and the scripts at www.freebsd.org/~jhb/gdb.  Simply
> > run 'kgdb' as root and do 'lcd /folder/with/scripts' and 'source gdb6'. 
> > You can then do 'lockchain 4283' to find who holds the lock this thread is
> > blocked on and what state they are in.
> 
> Looks like a deadlock:
> 
> (kgdb) lockchain 4283
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  thread 100215 (pid 4283, kdeinit4) blocked on lock 0xc64374a0 "unp_mtx"
>  thread 100122 (pid 1635, klauncher) blocked on lock 0xc6806348 "unp_mtx"
>  DEADLOCK
> 
> Looking through the scripts now to see how I can get more info on the call 
> chain and hoping I don't panic the machine ;). It is quite random to 
> reproduce.

In kgdb you can simply do 'tid 100122' followed by 'bt' and 'tid 100215' 
followed by 'bt'.

-- 
John Baldwin


More information about the freebsd-hackers mailing list