pike.git / lib / modules / Thread.pmod

version» Context lines:

pike.git/lib/modules/Thread.pmod:25: Inside #if constant(thread_create)
   while(!num) r_cond::wait(key);    tmp=buffer[ptr];    buffer[ptr++] = 0; // Throw away any references.    ptr%=sizeof(buffer);    if(read_tres < sizeof(buffer))    {    if(num-- == read_tres)    w_cond::broadcast();    }else{    num--; -  w_cond::signal(); +  w_cond::broadcast();    } -  +  key = 0;    return tmp;    }       array read_array()    {    array ret;    object key=lock::lock(2);    while(!num) r_cond::wait(key);    if(num==1)    {    ret=buffer[ptr..ptr];    buffer[ptr++] = 0; // Throw away any references.    ptr%=sizeof(buffer);    num--;    }else{    ret=buffer[ptr..]+buffer[..num-sizeof(ret)-1];    ptr=num=0;    buffer=allocate(sizeof(buffer)); // Throw away any references.    } -  +  key = 0;    w_cond::broadcast();    return ret;    }       void write(mixed v)    {    object key=lock::lock(2);    while(num == sizeof(buffer)) w_cond::wait(key);    buffer[(ptr + num) % sizeof(buffer)]=v;    if(write_tres)    {    if(num++ == write_tres)    r_cond::broadcast();    }else{    num++; -  r_cond::signal(); +  r_cond::broadcast();    } -  +  key = 0;    }       void create(int|void size)    {    write_tres=0;    buffer=allocate(read_tres=size || 128);    }   };      class Queue {