remove the system.clearPrefetchCache call
[IRC.git] / Robust / src / Runtime / DSTM / interface / sockpool.c
index 2cb2a2412039c5068f62c83e4b11cae6cc79ff1f..27d2e953f42f163acaaaaf28d9844f3245dd8b23 100644 (file)
@@ -101,6 +101,8 @@ int getSockWithLock(sockPoolHashTable_t *sockhash, unsigned int mid) {
   UnLock(&sockhash->mylock);
   if((sd = createNewSocket(mid)) != -1) {
     socknode_t *inusenode = calloc(1, sizeof(socknode_t));
+    inusenode->sd = sd;
+    inusenode->mid = mid;
     insToListWithLock(sockhash, inusenode);
     return sd;
   } else {
@@ -159,6 +161,33 @@ int getSock2(sockPoolHashTable_t *sockhash, unsigned int mid) {
   }
 }
 
+/*socket pool with multiple TR threads asking to connect to same machine  */
+int getSock2WithLock(sockPoolHashTable_t *sockhash, unsigned int mid) {
+  socknode_t **ptr;
+  int key = mid%(sockhash->size);
+  int sd;
+  
+  Lock(&sockhash->mylock);
+  ptr=&(sockhash->table[key]);
+  while(*ptr!=NULL) {
+    if (mid == (*ptr)->mid) {
+      UnLock(&sockhash->mylock);
+      return (*ptr)->sd;
+    }
+    ptr=&((*ptr)->next);
+  }
+  UnLock(&sockhash->mylock);
+  if((sd = createNewSocket(mid)) != -1) {
+    *ptr=calloc(1, sizeof(socknode_t));
+    (*ptr)->mid=mid;
+    (*ptr)->sd=sd;
+    //insToListWithLock(sockhash, *ptr);
+    return sd;
+  } else {
+    return -1;
+  }
+}
+
 void insToListWithLock(sockPoolHashTable_t *sockhash, socknode_t *inusenode) {
     Lock(&sockhash->mylock);
     inusenode->next = sockhash->inuse;