annoying gc bug
authorbdemsky <bdemsky>
Thu, 9 Apr 2009 00:02:23 +0000 (00:02 +0000)
committerbdemsky <bdemsky>
Thu, 9 Apr 2009 00:02:23 +0000 (00:02 +0000)
Robust/src/Runtime/STM/stm.c
Robust/src/Runtime/STM/tm.h
Robust/src/Runtime/garbage.c
Robust/src/Runtime/runtime.c
Robust/src/Runtime/socket.c

index dc0dcfb6cac16a72ff6634c56ef0d59655ecb1bb..1c6af83bde94b2224defc702cf7b2aad6525b045 100644 (file)
@@ -20,6 +20,8 @@ __thread struct objlist * newobjs;
 int numTransCommit = 0;
 int numTransAbort = 0;
 int nSoftAbort = 0;
+int nSoftAbortCommit = 0;
+int nSoftAbortAbort = 0;
 #endif
 
 
@@ -191,12 +193,18 @@ void freenewobjs() {
  * ================================================================
  */
 int transCommit() {
+#ifdef TRANSSTATS
+  int softaborted=0;
+#endif
   do {
     /* Look through all the objects in the transaction hash table */
     int finalResponse = traverseCache();
     if(finalResponse == TRANS_ABORT) {
 #ifdef TRANSSTATS
       numTransAbort++;
+      if (softaborted) {
+       nSoftAbortAbort++;
+      }
 #endif
       freenewobjs();
       objstrDelete(t_cache);
@@ -206,6 +214,9 @@ int transCommit() {
     if(finalResponse == TRANS_COMMIT) {
 #ifdef TRANSSTATS
       numTransCommit++;
+      if (softaborted) {
+       nSoftAbortCommit++;
+      }
 #endif
       freenewobjs();
       objstrDelete(t_cache);
@@ -216,6 +227,7 @@ int transCommit() {
     if(finalResponse == TRANS_SOFT_ABORT) {
 #ifdef TRANSSTATS
       nSoftAbort++;
+      softaborted=1;
 #endif
       randomdelay();
     } else {
index 918cd9f39fc6ee3de2ae997f5c5e64b68e7dcaf2..8c231135b6385bf02ad96180fa1eae8f19783a37 100644 (file)
@@ -130,6 +130,8 @@ typedef struct newObjCreated {
 extern int numTransCommit;
 extern int numTransAbort;
 extern int nSoftAbort;
+extern int nSoftAbortAbort;
+extern int nSoftAbortCommit;
 #endif
 
 /* ================================
index 8f233fa4c6430332a5e3f2bcddb5a882bef2dd0a..875fa9de53d62b9d483de4bf3813aa9ca9378ebd 100644 (file)
@@ -22,7 +22,7 @@
 
 #define NUMPTRS 100
 
-#define INITIALHEAPSIZE 128*1024*1024
+#define INITIALHEAPSIZE 16*1024*1024
 #define GCPOINT(x) ((int)((x)*0.95))
 /* This define takes in how full the heap is initially and returns a new heap size to use */
 #define HEAPSIZE(x,y) ((int)(x+y))*2
@@ -286,8 +286,8 @@ void collect(struct garbagelist * stackptr) {
   if (c_table!=NULL) {
       fixtable(&c_table, c_size);
       fixobjlist(newobjs);
-      memorybase=NULL;
   }
+  memorybase=NULL;
 #endif
 
   /* Check current stack */
@@ -316,8 +316,8 @@ void collect(struct garbagelist * stackptr) {
     if ((*listptr->tc_table)!=NULL) {
       fixtable(listptr->tc_table, listptr->tc_size);
       fixobjlist(listptr->objlist);
-      (*listptr->base)=NULL;
     }
+    *(listptr->base)=NULL;
 #endif
     stackptr=listptr->stackptr;
     listptr=listptr->next;
index 25ee0f816ad60f6f1346614084654cbbe1fa68a9..cc422786e931465eda3091143e703e2f098c06ef 100644 (file)
@@ -104,6 +104,10 @@ void CALL11(___System______exit____I,int ___status___, int ___status___) {
   printf("numTransCommit = %d\n", numTransCommit);
   printf("numTransAbort = %d\n", numTransAbort);
   printf("nSoftAbort = %d\n", nSoftAbort);
+#ifdef STM
+  printf("nSoftAbortCommit = %d\n", nSoftAbortCommit);
+  printf("nSoftAbortAbort = %d\n", nSoftAbortAbort);
+#endif
 #endif
   exit(___status___);
 }
index 9adbd2e9f5aa675c8386ec571721e539f28ce157..b82840e9401bcf12c93169eb1dd9564978d282f9 100644 (file)
@@ -376,7 +376,6 @@ int CALL02(___Socket______nativeRead_____AR_B, struct ___Socket___ * ___this___,
 #endif
   int byteread=-1;
 
-  //  printf("Doing read on %d\n",fd);
   do {
     byteread=read(fd, charstr, length);
   } while(byteread==-1&&errno==EINTR);