Added ability to determine if an address is managed by Isomalloc.
authorOrion Lawlor <olawlor@acm.org>
Fri, 7 Dec 2001 23:51:04 +0000 (23:51 +0000)
committerOrion Lawlor <olawlor@acm.org>
Fri, 7 Dec 2001 23:51:04 +0000 (23:51 +0000)
src/conv-core/converse.h
src/conv-core/isomalloc.c

index 6b97c269962081ccf18c5b1c3815c705bcc5f9fa..5206d37ab60cc5f5f5a934f3313005e19b26ed07 100644 (file)
@@ -696,6 +696,7 @@ typedef struct CmiIsomallocBlock CmiIsomallocBlock;
 void *CmiIsomalloc(int size,CmiIsomallocBlock *b);
 void *CmiIsomallocPup(pup_er p,CmiIsomallocBlock *b);
 void  CmiIsomallocFree(CmiIsomallocBlock *b);
+int   CmiIsomallocInRange(void *addr);
 
 /****** CTH: THE LOW-LEVEL THREADS PACKAGE ******/
 
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)
 {