>>>> "Ray" == Raymond Toy
<toy(a)rtp.ericsson.se> writes:
>>>> "Martin" == Martin Buchholz
<martin(a)xemacs.org> writes:
Martin> Yes, always_gc set to 1 slows down
XEmacs enormously. But if you have
Martin> a likely suspect, then that may be the best way to find a
Martin> _reproducible_ crash, at which point it can be dissected, analysed and
Martin> maybe even fixed. If you can't reproduce the crash, you never know
Martin> whether you've fixed it.
Ray> Success!!!! I've found a 100% reproducible case. This is with
Ray> 21.2.37 on Solaris 2.7 compiled with gcc 2.95.2. This also includes
Ray> some of the UNGCPRO patches from Yoshiki Hayashi, posted yesterday.
Now that you have a completely reproducible case, we can see whether a
patch can fix it.
I can't try to reproduce your crash directly since I don't have
clearcase, but...your backtrace looks very suggestive, so...
Here's a patch for you to try. Please rebuild, re-do your 100% case,
and let us know the results.
GCPROs are very tricky.
Index: src/fileio.c
===================================================================
RCS file: /usr/CVSroot/XEmacs/xemacs/src/fileio.c,v
retrieving revision 1.51.2.31
diff -u -w -r1.51.2.31 fileio.c
--- src/fileio.c 2000/11/13 09:56:50 1.51.2.31
+++ src/fileio.c 2000/11/16 08:21:38
@@ -761,14 +761,14 @@
struct passwd *pw;
#endif /* WIN32_NATIVE */
int length;
- Lisp_Object handler;
+ Lisp_Object handler = Qnil;
#ifdef CYGWIN
char *user;
#endif
- struct gcpro gcpro1, gcpro2;
+ struct gcpro gcpro1, gcpro2, gcpro3;
/* both of these get set below */
- GCPRO2 (name, default_directory);
+ GCPRO3 (name, default_directory, handler);
CHECK_STRING (name);
@@ -777,9 +777,8 @@
handler = Ffind_file_name_handler (name, Qexpand_file_name);
if (!NILP (handler))
{
- UNGCPRO;
- return call3_check_string (handler, Qexpand_file_name, name,
- default_directory);
+ RETURN_UNGCPRO (call3_check_string (handler, Qexpand_file_name,
+ name, default_directory));
}
/* Use the buffer's default-directory if DEFAULT_DIRECTORY is omitted. */
@@ -793,8 +792,8 @@
handler = Ffind_file_name_handler (default_directory, Qexpand_file_name);
if (!NILP (handler))
{
- UNGCPRO;
- return call3 (handler, Qexpand_file_name, name, default_directory);
+ RETURN_UNGCPRO (call3 (handler, Qexpand_file_name,
+ name, default_directory));
}
}