add native method for clearing prefetch cache to System.java
authoradash <adash>
Mon, 14 Apr 2008 21:38:58 +0000 (21:38 +0000)
committeradash <adash>
Mon, 14 Apr 2008 21:38:58 +0000 (21:38 +0000)
Robust/src/Runtime/DSTM/interface/dstm.h
Robust/src/Runtime/DSTM/interface/objstr.c
Robust/src/Runtime/DSTM/interface/prelookup.c
Robust/src/Runtime/DSTM/interface/prelookup.h
Robust/src/Runtime/runtime.c

index 61c38a7888b4c070e95a07da3c37aebde51e0dfe..56cb9627849da9613dadc4fd94f8f88059cc17ba 100644 (file)
@@ -72,6 +72,7 @@
 #include <errno.h>
 #include <time.h>
 #include "sockpool.h"
+#include "prelookup.h"
 
 //bit designations for status field of objheader
 #define DIRTY 0x01
@@ -226,6 +227,7 @@ unsigned int getNewOID(void);
 objstr_t *objstrCreate(unsigned int size); //size in bytes
 void objstrDelete(objstr_t *store); //traverse and free entire list
 void *objstrAlloc(objstr_t *store, unsigned int size); //size in bytes
+void clearObjStore(); // TODO:currently only clears the prefetch cache object store
 /* end object store */
 
 /* Prototypes for server portion */
index 2589deb82532c94282277e5a255a8a5b448deb11..991bd239f7d68fbe198021b979dad508d85ddade 100644 (file)
@@ -1,4 +1,5 @@
 #include "dstm.h"
+extern objstr_t *prefetchcache;
 
 objstr_t *objstrCreate(unsigned int size) {
   objstr_t *tmp = calloc(1, (sizeof(objstr_t) + size));
@@ -60,3 +61,10 @@ void *objstrAlloc(objstr_t *store, unsigned int size)
        }
 }
 
+void clearObjStore() {
+  objstr_t *tmp = prefetchcache;
+  while(tmp != NULL) {
+    bzero(tmp+1, tmp->size);
+    tmp = tmp->next;
+  }
+}
index 6eda49cf3e256f1cd4587cef622a27536c7bbaa3..4d596f1f281c330b187e2a790cd771aaf2183ddc 100644 (file)
@@ -208,3 +208,28 @@ void prehashDelete() {
 
        free(ptr);
 }
+
+//Note: This is based on the implementation of the inserting a key in the first position of the hashtable 
+void prehashClear() {
+  int i, isFirstBin;
+  prehashlistnode_t *ptr, *prev, *curr;
+
+  pthread_mutex_lock(&pflookup.lock);
+  ptr = pflookup.table; 
+  for(i = 0; i < pflookup.size; i++) {
+    prev = &ptr[i];
+    isFirstBin = 1;
+    while(prev->next != NULL) {
+      isFirstBin = 0;
+      curr = prev->next;
+      prev->next = curr->next;
+      free(curr);
+    }
+    if(isFirstBin == 1) {
+      prev->key = 0;
+      prev->next = NULL;
+    }
+  }
+  pthread_mutex_unlock(&pflookup.lock);
+}
+
index df020b3b6d64771193ba9ba476e73419f5dcdfb8..ff74c65b7b8abb48d93b8175b8b968bac18d65f8 100644 (file)
@@ -31,6 +31,7 @@ unsigned int prehashInsert(unsigned int key, void *val);
 void *prehashSearch(unsigned int key); //returns val, NULL if not found
 unsigned int prehashRemove(unsigned int key); //returns -1 if not found
 unsigned int prehashResize(unsigned int newsize);
+void prehashClear();
 /* end hash */
 
 #endif
index 197b9fb2a71ca3de37428061d4eba98e83445bbf..0bb81d2f6b7ca91b0738aa19b8a7303b8ef64ca6 100644 (file)
@@ -9,6 +9,7 @@
 #include "option.h"
 #ifdef DSTM
 #include "dstm.h"
+#include "prelookup.h"
 #endif
 
 extern int classsize[];
@@ -97,6 +98,13 @@ void CALL01(___System______printString____L___String___,struct ___String___ * __
     }
 }
 
+#ifdef DSTM
+void CALL00(___System______clearPrefetchCache____) {
+  clearObjStore();
+  prehashClear();
+}
+#endif
+
 /* Object allocation function */
 
 #ifdef DSTM