From 35f464a7581f0aaaa2c7c4a7fa4e5a548d0e0ed4 Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Tue, 9 Jan 2001 20:11:40 +0000 Subject: [PATCH] (STRING_BYTES) [GC_CHECK_STRING_BYTES]: Call function string_bytes. (GC_CHECK_STRING_BYTES): Moved here from alloc.c. --- src/ChangeLog | 14 ++++++++++++++ src/lisp.h | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 7a36b02cd67..0021ec4298b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,19 @@ 2001-01-09 Gerd Moellmann + * lisp.h (STRING_BYTES) [GC_CHECK_STRING_BYTES]: Call + function string_bytes. + (GC_CHECK_STRING_BYTES): Moved here from alloc.c. + + * alloc.c (CHECK_STRING_BYTES) [GC_CHECK_STRING_BYTES]: New macro. + (check_sblock, string_bytes) [GC_CHECK_STRING_BYTES]: New functions. + (check_string_bytes) [GC_CHECK_STRING_BYTES]: Add parameter ALL_P. + (allocate_string) [GC_CHECK_STRING_BYTES]: Always check strings in + the current sblock. + (mark_object) [GC_CHECK_STRING_BYTES]: Use CHECK_STRING_BYTES. + (gc_sweep) [GC_CHECK_STRING_BYTES]: Call check_string_bytes + after sweeping strings, and at the end. + (GC_CHECK_STRING_BYTES): Moved to lisp.h. + * alloc.c (Fgarbage_collect): Use a record_unwind_protect to ensure that pop_message is called. diff --git a/src/lisp.h b/src/lisp.h index f2096a5f616..b1951ea4365 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -26,6 +26,12 @@ Boston, MA 02111-1307, USA. */ #define P_(proto) () #endif +/* Define this temporarily to hunt a bug. If defined, the size of + strings is redundantly recorded in sdata structures so that it can + be compared to the sizes recorded in Lisp strings. */ + +#define GC_CHECK_STRING_BYTES 1 + /* These are default choices for the types to use. */ #ifdef _LP64 @@ -620,9 +626,20 @@ struct Lisp_Cons (XSTRING (STR)->size_byte >= 0) /* Return the length in bytes of STR. */ + +#ifdef GC_CHECK_STRING_BYTES + +struct Lisp_String; +extern int string_bytes P_ ((struct Lisp_String *)); +#define STRING_BYTES(S) string_bytes ((S)) + +#else /* not GC_CHECK_STRING_BYTES */ + #define STRING_BYTES(STR) \ ((STR)->size_byte < 0 ? (STR)->size : (STR)->size_byte) +#endif /* not GC_CHECK_STRING_BYTES */ + /* Set the length in bytes of STR. */ #define SET_STRING_BYTES(STR, SIZE) ((STR)->size_byte = (SIZE)) -- 2.39.2