Changeset 21454

Show
Ignore:
Timestamp:
14.01.2010 18:46:45 (9 years ago)
Author:
ak19
Message:

Dr Bainbridge added the useful new method check_system_heap() for Windows which calls _heapchk. It's helpful in detecting memory related errors when these have weird and inexplicable effects and which the debugger cannot help in unravelling.

Location:
main/trunk/greenstone2/common-src/src/lib
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/common-src/src/lib/gsdltools.cpp

    r18880 r21454  
    279279  return (i == 0); 
    280280} 
     281 
     282 
     283#if defined(__WIN32__) 
     284// A very useful function to call to debug mysterious heap memory errors when 
     285// their cause isn't clear in the Vis Studio debugger. Call it from various  
     286// places of the code and narrow down the point at which the heap memory becomes  
     287// corrupted. The title param can be the method this function is called from. 
     288void check_system_heap(char* title) 
     289{ 
     290  int heapstatus = _heapchk(); 
     291 
     292  char message[1024]; 
     293 
     294  switch (heapstatus) { 
     295  case _HEAPOK: 
     296    sprintf(message,"%s","OK - heap is fine"); 
     297    break; 
     298  case _HEAPEMPTY: 
     299    sprintf(message,"%s","OK - heap is empty"); 
     300    break; 
     301  case _HEAPBADBEGIN: 
     302    sprintf(message,"%s","ERROR - bad start of heap"); 
     303    break; 
     304  case _HEAPBADNODE: 
     305    sprintf(message,"%s","Error - bad node in heap"); 
     306    break; 
     307  default: 
     308    sprintf(message,"%s: %d","Unrecognized heap status",heapstatus); 
     309  } 
     310 
     311  MessageBox (NULL, message, title, MB_OK); 
     312} 
     313 
     314#endif 
  • main/trunk/greenstone2/common-src/src/lib/gsdltools.h

    r17545 r21454  
    7373bool perl_ok (ostream &logout); 
    7474 
     75#if defined(__WIN32__) 
     76void check_system_heap(char* title); 
     77#endif 
     78 
    7579#endif 
    7680