changeset 2881:0e0af7cbfd1b

[xemacs-hg @ 2005-08-01 16:28:18 by darrylo] On some (64-bit) systems, sizeof(int) != sizeof(long), and this can cause crashes because in-use lisp objects can get prematurely gc'd (and 0xdeadbeef'd). This occurs because the memory_description for the Gap_Array structure incorrectly describes some members as XD_INT's (32-bit objects), when they should actually be XD_ELEMCOUNT's and XD_BYTECOUNT's (both 64-bit objects), as that is how they are declared in the structure.
author darrylo
date Mon, 01 Aug 2005 16:28:21 +0000
parents 617b080c902f
children c7034fe23870
files src/ChangeLog src/extents.c
diffstat 2 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Jul 31 21:51:03 2005 +0000
+++ b/src/ChangeLog	Mon Aug 01 16:28:21 2005 +0000
@@ -1,3 +1,13 @@
+2005-07-29  Darryl Okahata  <darrylo@xemacs.org>
+
+	* extents.c (lispobj_gap_array_description_1): fix the memory
+	descriptions for the "gap", "offset_past_gap", and "els_past_gap"
+	members.  Before, they were incorrectly defined as "XD_INT"
+	objects.  They've been corrected to use "XD_ELEMCOUNT" and
+	"XD_BYTECOUNT", as that is how they are defined in the actual
+	Gap_Array declaration.  This is important on systems where
+	sizeof(int) != sizeof(long), such as some 64-bit systems.
+
 2005-07-24  Fabrice Popineau <Fabrice.Popineau@supelec.fr>
 
 	* frame-msw.c (mswindows_set_frame_size): Don't have a frame size
--- a/src/extents.c	Sun Jul 31 21:51:03 2005 +0000
+++ b/src/extents.c	Mon Aug 01 16:28:21 2005 +0000
@@ -1046,9 +1046,9 @@
 };
 
 static const struct memory_description lispobj_gap_array_description_1[] = { 
-  { XD_INT, offsetof (Gap_Array, gap) },
-  { XD_INT, offsetof (Gap_Array, offset_past_gap) },
-  { XD_INT, offsetof (Gap_Array, els_past_gap) },
+  { XD_ELEMCOUNT, offsetof (Gap_Array, gap) },
+  { XD_BYTECOUNT, offsetof (Gap_Array, offset_past_gap) },
+  { XD_ELEMCOUNT, offsetof (Gap_Array, els_past_gap) },
   { XD_BLOCK_PTR, offsetof (Gap_Array, markers), 1,
     { &gap_array_marker_description }, XD_FLAG_NO_KKCC },
   { XD_BLOCK_ARRAY, offsetof (Gap_Array, array), XD_INDIRECT (0, 0),