#include <config.h>
#include "lisp.h"
#else
-void *malloc (unsigned long);
+void *malloc (size_t);
#endif
#if !defined(HAVE_LIBMCHECK)
/* System function prototypes don't belong in C source files */
/* extern void free (void *); */
-struct hash_table *pointer_table;
+static struct hash_table *pointer_table;
extern void (*__free_hook) (void *);
-extern void *(*__malloc_hook) (unsigned long);
+extern void *(*__malloc_hook) (size_t);
-static void *check_malloc (unsigned long);
+static void *check_malloc (size_t);
-typedef void (*fun_ptr) ();
+typedef void (*fun_ptr) (void);
/* free_queue is not too useful without backtrace logging */
#define FREE_QUEUE_LIMIT 1
unsigned long length;
} free_queue_entry;
-free_queue_entry free_queue[FREE_QUEUE_LIMIT];
+static free_queue_entry free_queue[FREE_QUEUE_LIMIT];
-int current_free;
+static int current_free;
-int strict_free_check;
+static int strict_free_check;
static void
check_free (void *ptr)
#endif
EMACS_INT present = (EMACS_INT) gethash (ptr, pointer_table,
- (CONST void **) &size);
+ (const void **) &size);
if (!present)
{
/* I originally wrote: "There's really no need to drop core."
I have seen the error of my ways. -slb */
if (strict_free_check)
- abort ();
+ ABORT ();
#endif
printf("Freeing unmalloc'ed memory at %p\n", ptr);
__free_hook = check_free;
#if !defined(__linux__)
/* See above comment. */
if (strict_free_check)
- abort ();
+ ABORT ();
#endif
printf("Freeing %p twice\n", ptr);
__free_hook = check_free;
}
static void *
-check_malloc (unsigned long size)
+check_malloc (size_t size)
{
- unsigned long rounded_up_size;
+ size_t rounded_up_size;
void *result;
__free_hook = 0;
return result;
}
-extern void *(*__realloc_hook) (void *, unsigned long);
+extern void *(*__realloc_hook) (void *, size_t);
#ifdef MIN
#undef MIN
/* Don't optimize realloc */
static void *
-check_realloc (void * ptr, unsigned long size)
+check_realloc (void * ptr, size_t size)
{
EMACS_INT present;
- unsigned long old_size;
+ size_t old_size;
void *result = malloc (size);
if (!ptr) return result;
- present = (EMACS_INT) gethash (ptr, pointer_table, (CONST void **) &old_size);
+ present = (EMACS_INT) gethash (ptr, pointer_table, (const void **) &old_size);
if (!present)
{
/* This can only happen by reallocing a pointer that didn't
come from malloc. */
#if !defined(__linux__)
/* see comment in check_free(). */
- abort ();
+ ABORT ();
#endif
printf("Realloc'ing unmalloc'ed pointer at %p\n", ptr);
}
completely gone in XEmacs */
static void *
-block_input_malloc (unsigned long size);
+block_input_malloc (size_t size);
static void
block_input_free (void* ptr)
}
static void *
-block_input_malloc (unsigned long size)
+block_input_malloc (size_t size)
{
void* result;
__free_hook = 0;
static void *
-block_input_realloc (void* ptr, unsigned long size)
+block_input_realloc (void* ptr, size_t size)
{
void* result;
__free_hook = 0;
}
#else
-void (*__free_hook)() = check_free;
-void *(*__malloc_hook)() = check_malloc;
-void *(*__realloc_hook)() = check_realloc;
+void (*__free_hook)(void *) = check_free;
+void *(*__malloc_hook)(size_t) = check_malloc;
+void *(*__realloc_hook)(void *, size_t) = check_realloc;
#endif
#endif /* !defined(HAVE_LIBMCHECK) */
/* Note: There is no more input blocking in XEmacs */
typedef enum {
block_type, unblock_type, totally_type,
- gcpro1_type, gcpro2_type, gcpro3_type, gcpro4_type, ungcpro_type
+ gcpro1_type, gcpro2_type, gcpro3_type, gcpro4_type, gcpro5_type,
+ ungcpro_type
} blocktype;
struct block_input_history_struct
typedef struct block_input_history_struct block_input_history;
-#endif
+#endif /* DEBUG_INPUT_BLOCKING || DEBUG_GCPRO */
#ifdef DEBUG_INPUT_BLOCKING
note_block_input (char *file, int line)
{
note_block (file, line, block_type);
- if (interrupt_input_blocked > 2) abort();
+ if (interrupt_input_blocked > 2) ABORT();
}
note_unblock_input (char* file, int line)
blhistptr = 0;
}
-#endif
+#endif /* DEBUG_INPUT_BLOCKING */
\f
#ifdef DEBUG_GCPRO
static void
log_gcpro (char *file, int line, struct gcpro *value, blocktype type)
{
- FRAME start_frame;
-
if (type == ungcpro_type)
{
if (value == gcprolist) goto OK;
- if (! gcprolist) abort ();
+ if (! gcprolist) ABORT ();
if (value == gcprolist->next) goto OK;
- if (! gcprolist->next) abort ();
+ if (! gcprolist->next) ABORT ();
if (value == gcprolist->next->next) goto OK;
- if (! gcprolist->next->next) abort ();
+ if (! gcprolist->next->next) ABORT ();
if (value == gcprolist->next->next->next) goto OK;
- abort ();
+ if (! gcprolist->next->next->next) ABORT ();
+ if (value == gcprolist->next->next->next->next) goto OK;
+ ABORT ();
OK:;
}
gcprohist[gcprohistptr].file = file;
gcprolist = gcpro1->next;
}
+
+/* To be called from the debugger */
+void show_gcprohist (void);
void
show_gcprohist (void)
{
gcprohist[j].type == gcpro2_type ? "GCPRO2" :
gcprohist[j].type == gcpro3_type ? "GCPRO3" :
gcprohist[j].type == gcpro4_type ? "GCPRO4" :
+ gcprohist[j].type == gcpro5_type ? "GCPRO5" :
gcprohist[j].type == ungcpro_type ? "UNGCPRO" : "???"),
gcprohist[j].value);
}
fflush (stdout);
}
-#endif
+#endif /* DEBUG_GCPRO */