From 878a6eb61c7a055c45aa1b79347929b827d9c250 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 5 Aug 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-08-05 --- port/proc.c | 9 ++++++++- port/taslock.c | 11 +++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/port/proc.c b/port/proc.c index eea6b08f78b43aedb9f19a9105520e29fca8ce1b..2007eaab5f707aacb61821d517f71c503e87f1af 100644 --- a/port/proc.c +++ b/port/proc.c @@ -351,7 +351,7 @@ tfn(void *arg) void tsleep(Rendez *r, int (*fn)(void*), void *arg, int ms) { - ulong when; + ulong when, i; Proc *f, **l; when = MS2TK(ms)+MACHP(0)->ticks; @@ -359,6 +359,7 @@ tsleep(Rendez *r, int (*fn)(void*), void *arg, int ms) lock(&talarm); /* take out of list if checkalarm didn't */ if(up->trend) { +i = 0; l = &talarm.list; for(f = *l; f; f = f->tlink) { if(f == up) { @@ -366,6 +367,12 @@ tsleep(Rendez *r, int (*fn)(void*), void *arg, int ms) break; } l = &f->tlink; +if(i++ > 20) { + print("tlarm loop: %lux\n", talarm.list); + for(i = 20, f = talarm.list; f && i--; f = f->tlink) + print("%lux ", f); + for(;;); +} } } /* insert in increasing time order */ diff --git a/port/taslock.c b/port/taslock.c index 0e1bd45d6d83eb749e8f3f975e403f603323e2ef..5cb45191e1d1305e15ef20e3f25637d739d97e70 100644 --- a/port/taslock.c +++ b/port/taslock.c @@ -8,12 +8,19 @@ void lock(Lock *l) { + int loop; + if(tas(&l->key) == 0) return; + loop = 50000000; for(;;){ - while(l->key) - ; + while(l->key) { + if(loop-- <= 0) { + dumpstack(); + panic("lock loop: lock %lux\n", l); + } + } if(tas(&l->key) == 0) return; }