diff options
author | Russ Cox <rsc@swtch.com> | 2007-08-22 11:14:30 -0400 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2007-08-22 11:14:30 -0400 |
commit | 47ede89e4a832de2dada80599c1260f456275f19 (patch) | |
tree | 13a3c18def343a39c2124a0674a79ee8cbce6870 | |
parent | acecbb161981dcbe1f1e356c3ad586741a2240b9 (diff) | |
download | plan9port-47ede89e4a832de2dada80599c1260f456275f19.tar.gz plan9port-47ede89e4a832de2dada80599c1260f456275f19.tar.bz2 plan9port-47ede89e4a832de2dada80599c1260f456275f19.zip |
libthread: simplify alt tracking, possibly fixing bug
-rw-r--r-- | include/thread.h | 1 | ||||
-rw-r--r-- | src/libthread/channel.c | 15 | ||||
-rw-r--r-- | src/libthread/threadimpl.h | 1 |
3 files changed, 9 insertions, 8 deletions
diff --git a/include/thread.h b/include/thread.h index 2301191d..739fe0fe 100644 --- a/include/thread.h +++ b/include/thread.h @@ -82,7 +82,6 @@ struct Alt void *v; uint op; _Thread *thread; - Alt *xalt; }; struct _Altarray diff --git a/src/libthread/channel.c b/src/libthread/channel.c index 903889a4..080f84de 100644 --- a/src/libthread/channel.c +++ b/src/libthread/channel.c @@ -234,8 +234,8 @@ altexec(Alt *a) i = rand()%ar->n; other = ar->a[i]; altcopy(a, other); - altalldequeue(other->xalt); - other->xalt[0].xalt = other; + altalldequeue(other->thread->alt); + other->thread->alt = other; _threadready(other->thread); }else altcopy(a, nil); @@ -256,10 +256,9 @@ chanalt(Alt *a) canblock = a[i].op == CHANEND; t = proc()->thread; - for(i=0; i<n; i++){ + for(i=0; i<n; i++) a[i].thread = t; - a[i].xalt = a; - } + t->alt = a; qlock(&chanlock); if(dbgalt) print("alt "); ncan = 0; @@ -307,9 +306,11 @@ if(dbgalt)print("\n"); /* * the guy who ran the op took care of dequeueing us - * and then set a[0].alt to the one that was executed. + * and then set t->alt to the one that was executed. */ - return a[0].xalt - a; + if(t->alt < a || t->alt >= a+n) + sysfatal("channel bad alt"); + return t->alt - a; } static int diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h index 2a69d497..bc18d3a4 100644 --- a/src/libthread/threadimpl.h +++ b/src/libthread/threadimpl.h @@ -114,6 +114,7 @@ struct _Thread char name[256]; char state[256]; void *udata; + Alt *alt; }; struct _Procrendez |