Skip to content
Snippets Groups Projects
Commit 87e3696c authored by Fredrik Hübinette (Hubbe)'s avatar Fredrik Hübinette (Hubbe)
Browse files

bugfix in Fifo

Rev: lib/modules/Thread.pmod:1.6
parent 7734a9a5
No related branches found
No related tags found
No related merge requests found
......@@ -7,17 +7,18 @@ class Fifo {
inherit Mutex: lock;
mixed *buffer;
int r_ptr, w_ptr;
int ptr, num;
int size() { return (w_ptr+sizeof(buffer) - r_ptr) % sizeof(buffer); }
int size() { return num; }
mixed read()
{
mixed tmp;
object key=lock::lock();
while(!size()) r_cond::wait(key);
tmp=buffer[r_ptr];
if(++r_ptr >= sizeof(buffer)) r_ptr=0;
while(!num) r_cond::wait(key);
tmp=buffer[ptr++];
r_ptr%=sizeof(buffer);
num--;
w_cond::signal();
return tmp;
}
......@@ -25,9 +26,8 @@ class Fifo {
void write(mixed v)
{
object key=lock::lock();
while(size() == sizeof(buffer)) w_cond::wait(key);
buffer[w_ptr]=v;
if(++w_ptr >= sizeof(buffer)) w_ptr=0;
while(num == sizeof(buffer)) w_cond::wait(key);
buffer[(ptr + num++) % sizeof(buffer)]=v;
r_cond::signal();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment