From: adash Date: Fri, 4 Apr 2008 19:49:45 +0000 (+0000) Subject: changes X-Git-Tag: preEdgeChange~181 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ccef0224c7be7b963d369e02c12470b10a9de71a;p=IRC.git changes --- diff --git a/Robust/src/Runtime/DSTM/interface/sockpool.c b/Robust/src/Runtime/DSTM/interface/sockpool.c index 80ea38c2..1a0ef84a 100644 --- a/Robust/src/Runtime/DSTM/interface/sockpool.c +++ b/Robust/src/Runtime/DSTM/interface/sockpool.c @@ -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; } diff --git a/Robust/src/Runtime/DSTM/interface/sockpool.h b/Robust/src/Runtime/DSTM/interface/sockpool.h index 185da855..654d03f9 100644 --- a/Robust/src/Runtime/DSTM/interface/sockpool.h +++ b/Robust/src/Runtime/DSTM/interface/sockpool.h @@ -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 *);