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