Jan> P.S. Can you trigger the abort in this patch?
An update:
I've been running with your patched version for a while, and have
triggered the "cur_elt >= 0" assertion again a couple of times, but
have not triggered your assertion.
Ah, %$#@%!#$. There is one ! too many in this patch.
Here is what I meant
Index: redisplay.c
===================================================================
RCS file: /usr/CVSroot/XEmacs/xemacs-20/src/redisplay.c,v
retrieving revision 1.57
diff -u -u -r1.57 redisplay.c
--- redisplay.c 1999/05/12 14:29:13 1.57
+++ redisplay.c 1999/08/12 19:37:53
@@ -6245,6 +6245,19 @@
lsc.end = dl->end_bufpos;
lsc.height = dl->ascent + dl->descent;
+ {
+ struct buffer *buf = XBUFFER(w->buffer);
+ /* Paranaoid line start cache check */
+ if (! (lsc.start <= BUF_BEGV(buf) ||
+ BUF_FETCH_CHAR(buf,lsc.start - 1) == (Emchar) '\n'))
+ {
+ fprintf(stderr,"Wrong stuff in line start cache!\n"
+ "Supposedly begins at: %10s",
+ (char *)BUF_BYTE_ADDRESS(buf,lsc.start));
+ assert(0);
+ }
+ }
+
Dynarr_add (internal_cache, lsc);
}
}
However there is no need to run that. For me it crashes displaying the
splash screen. The reason: a wrapped line.
(Sorry if this gets technical)
The problem is that \
when a line is wrap \
ped like this
Then there are 3 display lines and the second 2 don't actually start at
a new line in the buffer, just in the display.
Previous line_start_cache rediplay crashes have all been of the type
where code actually assumed that the line_start_cache actually contained lines
starting at "\n", and we have fixed the triggers for that.
It seems now that we better check these assumptions.
i'm too tired now to have a real look. Gunnar Do you remember where
that problem occured, was it also at asssert(cur_elt>=0)?
Jan
BTW Hamish, does the reproduction recipe at the end of
http://www.xemacs.org/list-archives/xemacs-beta/9903/msg00475.html
"work" for you?