kernel: better pidalloc()
This commit is contained in:
parent
2450b55c7b
commit
4fe344847c
|
@ -1592,19 +1592,22 @@ accounttime(void)
|
||||||
int
|
int
|
||||||
pidalloc(Proc *p)
|
pidalloc(Proc *p)
|
||||||
{
|
{
|
||||||
static Ref ref;
|
static int gen, wrapped;
|
||||||
int pid, h;
|
int pid, h;
|
||||||
Proc *x;
|
Proc *x;
|
||||||
|
|
||||||
lock(&procalloc);
|
lock(&procalloc);
|
||||||
Retry:
|
Retry:
|
||||||
pid = incref(&ref) & 0x7FFFFFFF;
|
pid = ++gen & 0x7FFFFFFF;
|
||||||
if(pid == 0)
|
if(pid == 0){
|
||||||
|
wrapped = 1;
|
||||||
goto Retry;
|
goto Retry;
|
||||||
|
}
|
||||||
h = pid % nelem(procalloc.ht);
|
h = pid % nelem(procalloc.ht);
|
||||||
for(x = procalloc.ht[h]; x != nil; x = x->pidhash)
|
if(wrapped)
|
||||||
if(x->pid == pid)
|
for(x = procalloc.ht[h]; x != nil; x = x->pidhash)
|
||||||
goto Retry;
|
if(x->pid == pid)
|
||||||
|
goto Retry;
|
||||||
if(p){
|
if(p){
|
||||||
p->pid = pid;
|
p->pid = pid;
|
||||||
p->pidhash = procalloc.ht[h];
|
p->pidhash = procalloc.ht[h];
|
||||||
|
|
Loading…
Reference in a new issue