HACK to make things work
authorbdemsky <bdemsky>
Wed, 7 May 2008 21:59:00 +0000 (21:59 +0000)
committerbdemsky <bdemsky>
Wed, 7 May 2008 21:59:00 +0000 (21:59 +0000)
Robust/src/Runtime/DSTM/interface/prelookup.c
Robust/src/Runtime/DSTM/interface/prelookup.h
Robust/src/Runtime/DSTM/interface/trans.c

index 05c2c2b3b013a211c9db589ecbcdae775359de7c..7e81d5f394fce7c65afbaa7755a7df8326399fd4 100644 (file)
@@ -1,5 +1,6 @@
 /* LOCK THE ENTIRE HASH TABLE */
 #include "prelookup.h"
+extern objstr_t *prefetchcache;
 
 prehashtable_t pflookup; //Global prefetch cache table
 
@@ -12,7 +13,8 @@ unsigned int prehashCreate(unsigned int size, float loadfactor) {
     printf("Calloc error %s %d\n", __FILE__, __LINE__);
     return 1;
   }
-  
+  pflookup.hack=NULL;
+  pflookup.hack2=NULL;
   pflookup.table = nodes;
   pflookup.size = size; 
   pflookup.numelements = 0; // Initial number of elements in the hash
@@ -192,6 +194,9 @@ void prehashClear() {
   int i, isFirstBin;
   prehashlistnode_t *ptr, *prev, *curr;
   
+  objstr_t *oldcache=prefetchcache;
+  prefetchcache=objstrCreate(prefetchcache->size);
+
   pthread_mutex_lock(&pflookup.lock);
   ptr = pflookup.table; 
   for(i = 0; i < pflookup.size; i++) {
@@ -209,5 +214,11 @@ void prehashClear() {
     }
   }
   pthread_mutex_unlock(&pflookup.lock);
+
+  if (pflookup.hack2!=NULL) {
+    objstrDelete(pflookup.hack2);
+  }
+  pflookup.hack2=pflookup.hack;
+  pflookup.hack=oldcache;
 }
 
index ff74c65b7b8abb48d93b8175b8b968bac18d65f8..8b4c30be564dafde79624893bc2885528e3cca3e 100644 (file)
@@ -4,6 +4,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <pthread.h>
+#include "dstm.h"
 
 #define LOADFACTOR 0.5
 #define HASH_SIZE 100
@@ -14,14 +15,18 @@ typedef struct prehashlistnode {
        struct prehashlistnode *next;
 } prehashlistnode_t;
 
+struct objstr;
+
 typedef struct prehashtable {
-       prehashlistnode_t *table;       // points to beginning of hash table
-       unsigned int size;
-       unsigned int numelements;
-       float loadfactor;
-       pthread_mutex_t lock;
-       pthread_mutexattr_t prefetchmutexattr;
-       pthread_cond_t cond;
+  prehashlistnode_t *table;    // points to beginning of hash table
+  unsigned int size;
+  unsigned int numelements;
+  float loadfactor;
+  pthread_mutex_t lock;
+  pthread_mutexattr_t prefetchmutexattr;
+  pthread_cond_t cond;
+  struct objstr *hack2;
+  struct objstr *hack;
 } prehashtable_t;
 
 /* Prototypes for hash*/
index 56c038602a6550f5f4ceb40d363de6511408d76f..d60bea5f3fbcafa7bfbd4368a109420233d069bd 100644 (file)
@@ -654,7 +654,6 @@ void *transRequest(void *threadarg) {
   /* Read control message from Participant */
   recv_data(sd, &control, sizeof(char));
   recvcontrol = control;
-
   /* Update common data structure and increment count */
   tdata->recvmsg[tdata->thread_id].rcv_status = recvcontrol;