Store in QLock the pc of the holder. Useful when you mess things up and forget to release a lock. Reference: /n/sources/patch/applied/qlock-pc Date: Sat May 11 21:45:50 CES 2013 Signed-off-by: nemo@lsub.org --- /sys/src/9/port/portdat.h Sat May 11 21:44:51 2013 +++ /sys/src/9/port/portdat.h Sat May 11 21:44:46 2013 @@ -108,6 +108,7 @@ Proc *head; /* next process waiting for object */ Proc *tail; /* last process waiting for object */ int locked; /* flag */ + uintptr qpc; /* pc of the holder */ }; struct RWlock --- /sys/src/9/port/qlock.c Sat May 11 21:44:57 2013 +++ /sys/src/9/port/qlock.c Sat May 11 21:44:54 2013 @@ -29,6 +29,7 @@ rwstats.qlock++; if(!q->locked) { q->locked = 1; + q->qpc = getcallerpc(&q); unlock(&q->use); return; } @@ -46,6 +47,7 @@ up->qpc = getcallerpc(&q); unlock(&q->use); sched(); + q->qpc = getcallerpc(&q); } int @@ -58,6 +60,7 @@ return 0; } q->locked = 1; + q->qpc = getcallerpc(&q); unlock(&q->use); return 1; } @@ -81,6 +84,7 @@ return; } q->locked = 0; + q->qpc = 0; unlock(&q->use); }