update.
[chise/xemacs-chise.git.1] / src / free-hook.c
index af1df69..4d18ca2 100644 (file)
@@ -85,14 +85,14 @@ void *malloc (size_t);
 /* 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) (size_t);
 
 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
@@ -110,11 +110,11 @@ typedef struct {
   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)
@@ -131,7 +131,7 @@ check_free (void *ptr)
 #endif
 
       EMACS_INT present = (EMACS_INT) gethash (ptr, pointer_table,
-                                              (CONST void **) &size);
+                                              (const void **) &size);
 
       if (!present)
        {
@@ -141,7 +141,7 @@ check_free (void *ptr)
          /* 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;
@@ -155,7 +155,7 @@ check_free (void *ptr)
 #if !defined(__linux__)
          /* See above comment. */
          if (strict_free_check)
-           abort ();
+           ABORT ();
 #endif
          printf("Freeing %p twice\n", ptr);
          __free_hook = check_free;
@@ -257,14 +257,14 @@ check_realloc (void * ptr, size_t 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);
     }
@@ -418,7 +418,8 @@ void *(*__realloc_hook)(void *, size_t) = check_realloc;
 /* 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
@@ -431,7 +432,7 @@ 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
 
@@ -444,7 +445,7 @@ block_input_history blhist[BLHISTLIMIT];
 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)
@@ -469,7 +470,7 @@ note_block (char *file, int line, blocktype type)
     blhistptr = 0;
 }
 
-#endif
+#endif /* DEBUG_INPUT_BLOCKING */
 
 \f
 #ifdef DEBUG_GCPRO
@@ -481,18 +482,18 @@ block_input_history gcprohist[GCPROHISTLIMIT];
 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;
@@ -569,6 +570,9 @@ debug_ungcpro (char *file, int line, struct gcpro *gcpro1)
   gcprolist = gcpro1->next;
 }
 
+
+/* To be called from the debugger */
+void show_gcprohist (void);
 void
 show_gcprohist (void)
 {
@@ -585,10 +589,11 @@ 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 */