From 4fe344847cebf9fd9071d83c6bf7ed7a6c1da35e Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Wed, 21 Dec 2011 23:08:15 +0100 Subject: [PATCH] kernel: better pidalloc() --- sys/src/9/port/proc.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/sys/src/9/port/proc.c b/sys/src/9/port/proc.c index dd8862baa..6bb60d6b5 100644 --- a/sys/src/9/port/proc.c +++ b/sys/src/9/port/proc.c @@ -1592,19 +1592,22 @@ accounttime(void) int pidalloc(Proc *p) { - static Ref ref; + static int gen, wrapped; int pid, h; Proc *x; lock(&procalloc); Retry: - pid = incref(&ref) & 0x7FFFFFFF; - if(pid == 0) + pid = ++gen & 0x7FFFFFFF; + if(pid == 0){ + wrapped = 1; goto Retry; + } h = pid % nelem(procalloc.ht); - for(x = procalloc.ht[h]; x != nil; x = x->pidhash) - if(x->pid == pid) - goto Retry; + if(wrapped) + for(x = procalloc.ht[h]; x != nil; x = x->pidhash) + if(x->pid == pid) + goto Retry; if(p){ p->pid = pid; p->pidhash = procalloc.ht[h];