Segfault fix in prefetch queue + additional macros for debugging
[IRC.git] / Robust / src / Runtime / DSTM / interface / queue.c
index 51d586c5f17f76100bf1e58f07a64283c8049c30..9f2eb419b9ff96791c3e820838a70589182ce72e 100644 (file)
@@ -13,7 +13,7 @@ void queueInit(void) {
   /* Intitialize primary queue */
   headoffset=0;
   tailoffset=0;
-  memory=malloc(QSIZE);
+  memory=malloc(QSIZE+sizeof(int));//leave space for -1
   pthread_mutexattr_init(&qlockattr);
   pthread_mutexattr_settype(&qlockattr, PTHREAD_MUTEX_RECURSIVE_NP);
   pthread_mutex_init(&qlock, &qlockattr);
@@ -28,13 +28,13 @@ void * getmemory(int size) {
     while(headoffset<tailoffset)
       ;
     //Wait for tail to go past new start
-    while(tailoffset<tmpoffset)
+    while(tailoffset<=tmpoffset)
       ;
-    *((int *)(memory+headoffset))=-1;
+    *((int *)(memory+headoffset))=-1;//safe because we left space
     *((int*)memory)=size+sizeof(int);
     return memory+sizeof(int);
   } else {
-    while(headoffset<tailoffset&&tailoffset<tmpoffset)
+    while(headoffset<tailoffset&&tailoffset<=tmpoffset)
       ;
     *((int*)(memory+headoffset))=size+sizeof(int);
     return memory+headoffset+sizeof(int);
@@ -73,7 +73,6 @@ void inctail() {
     tailoffset=tmpoffset;
 }
 
-
 void predealloc() {
   free(memory);
 }