# HG changeset patch # User darrylo # Date 1122913701 0 # Node ID 0e0af7cbfd1bd15cbb024074a3215c1db2b3c57f # Parent 617b080c902fcd5a46de2f8720cbec547dfcd659 [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. diff -r 617b080c902f -r 0e0af7cbfd1b src/ChangeLog --- 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 + + * 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 * frame-msw.c (mswindows_set_frame_size): Don't have a frame size diff -r 617b080c902f -r 0e0af7cbfd1b src/extents.c --- 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),