void debugging_free(void *ptr, const char *source_file, int source_line) { if (NULL == ptr) { fprintf(stderr, "xfree(NULL) at %s:%d\n", source_file, source_line); fflush(stderr); abort(); } pthread_mutex_lock(&s_regptr_mutex); if (!unregister_ptr(ptr)) { fprintf(stderr, "Bad xfree() at %s:%d\n", source_file, source_line); pthread_mutex_unlock(&s_regptr_mutex); abort(); } ++free_count; pthread_mutex_unlock(&s_regptr_mutex); checking_free(ptr); }
void xfree_debug (void *ptr, const char *source_file, int source_line) { assert (ptr != NULL); ++free_count; unregister_ptr (ptr); free (ptr); }
void * xrealloc_debug (void *ptr, size_t newsize, const char *source_file, int source_line) { void *newptr = xrealloc_real (ptr, newsize); if (!ptr) { ++malloc_count; register_ptr (newptr, source_file, source_line); } else if (newptr != ptr) { unregister_ptr (ptr); register_ptr (newptr, source_file, source_line); } return newptr; }