From 87e3696c03fe216cb43593a1edeac9bec87d0001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Thu, 27 Feb 1997 06:53:21 -0800 Subject: [PATCH] bugfix in Fifo Rev: lib/modules/Thread.pmod:1.6 --- lib/modules/Thread.pmod | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/modules/Thread.pmod b/lib/modules/Thread.pmod index 255fe6f0c2..faf0d5999a 100644 --- a/lib/modules/Thread.pmod +++ b/lib/modules/Thread.pmod @@ -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(); } -- GitLab