changes
authoradash <adash>
Fri, 4 Apr 2008 19:49:45 +0000 (19:49 +0000)
committeradash <adash>
Fri, 4 Apr 2008 19:49:45 +0000 (19:49 +0000)
Robust/src/Runtime/DSTM/interface/sockpool.c
Robust/src/Runtime/DSTM/interface/sockpool.h

index 80ea38c20d1af2266868ab8c1ef3781711abd774..1a0ef84ae5a9d4afba295f7f64989f443dbb9156 100644 (file)
@@ -31,14 +31,8 @@ int createSockPool(unsigned int size, float loadfactor) {
         printf("Calloc error at %s line %d\n", __FILE__, __LINE__);
         return -1;
     }
-    socknode_t **inuselist;
-    if ((inuselist = calloc(size, sizeof(socknode_t *))) < 0) {
-        printf("Calloc error at %s line %d\n", __FILE__, __LINE__);
-        free(nodelist);
-        return -1;
-    }
     sockhash.table = nodelist;
-    sockhash.inuse = inuselist;
+    sockhash.inuse = NULL;
     sockhash.size = size;
     sockhash.numelements = 0;
     sockhash.loadfactor = loadfactor;
@@ -86,14 +80,17 @@ int getSock(unsigned int mid) {
     int midFound = 0;
     Lock(&sockhash.mylock);
     socknode_t *ptr = sockhash.table[key];
+    socknode_t *prev = (socknode_t *) &(sockhash.table[key]);
     while (ptr != NULL) {
         if (mid == ptr->mid) {
             midFound = 1;
             int sd = ptr->sd;
+            prev = ptr->next;
             UnLock(&sockhash.mylock);
             insToList(ptr);
             return sd;
         }
+        prev = ptr;
         ptr = ptr->next;
     }
     UnLock(&sockhash.mylock);
@@ -112,28 +109,25 @@ int getSock(unsigned int mid) {
     return -1;
 }
 
-int insToList(socknode_t *inusenode) {
-    int key = (inusenode->mid)%(sockhash.size);
+void insToList(socknode_t *inusenode) {
     Lock(&sockhash.mylock);
-    inusenode->next = sockhash.inuse[key];
-    sockhash.inuse[key] = inusenode;
+    inusenode->next = sockhash.inuse;
+    sockhash.inuse = inusenode;
     UnLock(&sockhash.mylock);
-    return 0;
 } 
 
 int freeSock(unsigned int mid, int sd) {
-    int key = mid%(sockhash.size);
-
-    Lock(&sockhash.mylock);
-    socknode_t *ptr = sockhash.inuse[key]; 
-    ptr->mid = mid;
-    ptr->sd = sd;
-    sockhash.inuse[key] = ptr->next;
-    ptr->next = sockhash.table[key];
-    sockhash.table[key] = ptr;
-    UnLock(&sockhash.mylock);
-}
-
-int deleteSockpool(sockPoolHashTable_t *sockhash) {
-    free(sockhash->table);
+    if(sockhash.inuse != NULL) {
+        Lock(&sockhash.mylock);
+        socknode_t *ptr = sockhash.inuse; 
+        ptr->mid = mid;
+        ptr->sd = sd;
+        sockhash.inuse = ptr->next;
+        int key = mid%(sockhash.size);
+        ptr->next = sockhash.table[key];
+        sockhash.table[key] = ptr;
+        UnLock(&sockhash.mylock);
+        return 0;
+    }
+    return -1;
 }
index 185da855cf6944d13ce3758ad5530f313c2deb42..654d03f901498e85528accdf8b4726320267f6c5 100644 (file)
@@ -15,7 +15,7 @@ typedef struct socknode {
 
 typedef struct sockPoolHashTable {
     socknode_t **table;
-    socknode_t **inuse;
+    socknode_t *inuse;
     unsigned int size;
     unsigned int numelements;
     float loadfactor;
@@ -26,7 +26,7 @@ int createSockPool(unsigned int, float);
 int getSock(unsigned int);
 int freeSock(unsigned int, int);
 int deleteSockpool(sockPoolHashTable_t *);
-int insToList(socknode_t *);
+void insToList(socknode_t *);
 int createNewSocket(unsigned int);
 int CompareAndSwap(int *, int, int);
 void InitLock(SpinLock *);