Added a function to free all entries in CmmTable which is used in the implemetation...
authorChao Mei <chaomei2@illinois.edu>
Tue, 30 Dec 2008 16:51:35 +0000 (16:51 +0000)
committerChao Mei <chaomei2@illinois.edu>
Tue, 30 Dec 2008 16:51:35 +0000 (16:51 +0000)
src/conv-core/msgmgr.c

index d9d021516ac22351c8c77b2dbd499b62fed3bb59..2809c87381c87f69ebc0d9f1ec6792085ea0f952 100644 (file)
@@ -41,6 +41,18 @@ CmmTable t;
   CmiFree(t);
 }
 
+//free all table entries but not the space
+//pointed by "msg"
+void CmmFreeAll(CmmTable t){
+    if(t==NULL) return;
+    CmmEntry cur = t->first;
+    while(cur){
+       CmmEntry toDel = cur;
+       cur = cur->next;
+       CmiFree(toDel);
+    }
+}
+
 void CmmPut(t, ntags, tags, msg)
 CmmTable t;
 int ntags;
@@ -83,6 +95,10 @@ int *rtags;
 int del;
 {
   CmmEntry *enth; CmmEntry ent; void *msg; int i;
+  //added by Chao Mei in case that t is already freed
+  //which happens in ~ampi() when doing out-of-core emulation for AMPI programs
+  if(t==NULL) return NULL;
+
   enth = &(t->first);
   while (1) {
     ent = (*enth);