Added ability to determine if an address is managed by Isomalloc.
[charm.git] / src / conv-core / isomalloc.c
index b5dc5ae0861478314c618bfe895227968b1c58f2..3fdc56cf9fe1f50731dd78cb57760e48f11f2672 100644 (file)
@@ -25,8 +25,9 @@ static int slotsize;
 /*Total number of slots per processor*/
 static int numslots;
 
-/*Start of isomalloc-managed addresses*/
+/*Start and end of isomalloc-managed addresses*/
 static char *isomallocStart;
+static char *isomallocEnd;
 
 /*Utility conversion functions*/
 static int addr2slot(void *addr) {
@@ -436,6 +437,7 @@ static void init_ranges(char **argv)
 
     /*Allocate stacks in unused region*/
     isomallocStart=freeRegion.start;
+    isomallocEnd=freeRegion.start+freeRegion.len;
     numslots=(freeRegion.len/slotsize)/CmiNumPes();
 
 #if CMK_THREADS_DEBUG
@@ -584,6 +586,11 @@ void CmiIsomallocFree(CmiIsomallocBlock *b)
        all_slotOP(&freeOP,s,n);
 }
 
+/*Return true if this address is in the region managed by isomalloc*/
+int CmiIsomallocInRange(void *addr)
+{
+       return (isomallocStart<=((char *)addr)) && (((char *)addr)<isomallocEnd);
+}
 
 void CmiIsomallocInit(char **argv)
 {