From c1ca42cae6eb3f13b0bf513c7131778cba228b8a Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Wed, 5 Sep 2012 16:55:03 +0400 Subject: [PATCH] * alloc.c (valid_lisp_object_p): Treat killed buffers, buffer_defaults and buffer_local_symbols as valid objects. Return special value to denote them. --- src/ChangeLog | 6 ++++++ src/alloc.c | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index cb4f1071c70..3d2e25f7828 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-09-05 Dmitry Antipov + + * alloc.c (valid_lisp_object_p): Treat killed buffers, + buffer_defaults and buffer_local_symbols as valid objects. + Return special value to denote them. + 2012-09-05 Paul Eggert * fileio.c, filelock.c, floatfns.c, fns.c: Use bool for boolean. diff --git a/src/alloc.c b/src/alloc.c index 157d3a1d799..80ab2d2cb97 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -4981,7 +4981,8 @@ valid_pointer_p (void *p) #endif } -/* Return 1 if OBJ is a valid lisp object. +/* Return 2 if OBJ is a killed or special buffer object. + Return 1 if OBJ is a valid lisp object. Return 0 if OBJ is NOT a valid lisp object. Return -1 if we cannot validate OBJ. This function can be quite slow, @@ -5002,6 +5003,9 @@ valid_lisp_object_p (Lisp_Object obj) if (PURE_POINTER_P (p)) return 1; + if (p == &buffer_defaults || p == &buffer_local_symbols) + return 2; + #if !GC_MARK_STACK return valid_pointer_p (p); #else @@ -5027,7 +5031,7 @@ valid_lisp_object_p (Lisp_Object obj) return 0; case MEM_TYPE_BUFFER: - return live_buffer_p (m, p); + return live_buffer_p (m, p) ? 1 : 2; case MEM_TYPE_CONS: return live_cons_p (m, p); -- 2.39.2