bugfix in the new implementation of cklists. Also, changed back to non-allocation
authorFilippo Gioachin <gioachin@illinois.edu>
Tue, 12 Apr 2005 00:47:15 +0000 (00:47 +0000)
committerFilippo Gioachin <gioachin@illinois.edu>
Tue, 12 Apr 2005 00:47:15 +0000 (00:47 +0000)
of memory if the queue is never used

src/util/cklists.h

index 9420b38bf85207543be2d8bfcd2ec6d613c175ae..c7dcdaa938fe7a5f2cc134bb3f70111d42c20b53 100644 (file)
@@ -42,6 +42,10 @@ class CkQ : private CkSTLHelper<T>, private CkNoncopyable {
       // blklen is always kept as a power of 2
       int newlen = blklen<<1;
       mask |= blklen;
+      if (blklen==0) {
+       newlen = 16;
+       mask = 0x0f;
+      }
       T *newblk = new T[newlen];
       elementCopy(newblk,block+first,blklen-first);
       elementCopy(newblk+blklen-first,block,first);
@@ -49,14 +53,13 @@ class CkQ : private CkSTLHelper<T>, private CkNoncopyable {
       blklen = newlen; first = 0;
     }
   public:
-    CkQ() :first(0),len(0),mask(3) {
-      blklen = 4;
-      block = new T[4];
+    CkQ() :first(0),len(0),mask(0) {
+      blklen = 0; block = NULL;
     }
     CkQ(int sz) :first(0),len(0) {
       int size = 2;
       mask = 0x03;
-      while (1<<size < sz) { size++; mask |= 1<<size; }
+      while (1<<size < sz) { mask |= 1<<size; size++; }
       blklen = 1<<size;
       block = new T[blklen];
     }