Latest crashes with profiling on
Adrian Aichner
adrian
Tue Oct 17 11:21:49 EDT 2006
Hello All!
I got profiling to work fairly reliable for short profiling windows of
seconds or minutes.
When I leave XEmacs unattended for many minutes to hours it eventually
crashes.
The typical signature is:
current_profile_function() line 168 + 4 bytes
sigprof_handler(int 0x0000001d) line 306 + 5 bytes
setitimer_helper_proc(unsigned int 0x0000f631, unsigned int 0x00000000, unsigned long 0x0000001d, unsigned long 0x00000000, unsigned long 0x00000000) line 788 + 19 bytes
WINMM! 76b454f3()
WINMM! 76b5ae36()
WINMM! 76b5af3a()
KERNEL32! 7c80b50b()
This is at "=>" in the following source fragment.
At this point the internal state of variables is already beyond belief.
I'll send in my patch to eval.c which gets me even to that point of
"stability" for review.
I'll attach my full log of recent backtraces in case anyone has time and interest to take a look.
Best regards!
Adrian
----------------------------------------------------------------------------
static Lisp_Object
current_profile_function (void)
{
Lisp_Object fun;
struct backtrace *bt = backtrace_list;
/* 2 because we set in_profiling when we entered the current routine. */
if (in_profiling >= 2)
return QSprofile_overhead;
/* Find a function actually being called. Potentially (?) there could be
a number of non-calling funs -- calling foo autoloads, which tries to
call bar, but requires evalling its args first, which calls baz, ...
If profiling was not enabled when the function was called, just treat
the function as actually called, because the info about whether we've
finished the preamble will not have been recorded. */
=>for (; bt && !bt->function_being_called; bt = bt->next)
----------------------------------------------------------------------------
-------------- next part --------------
----------------------------------------------------------------------------
inchash_eq(long 0x011f93f4, long 0x024ee580, long 0x066bff18) line 1165 + 4 bytes
profile_record_consing(long 0x008abce8) line 226
alloc_lrecord_array(long 0x010c572b, int 0x11792000, const lrecord_implementation * 0x1203dce7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0008e4a5, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x006ab7c8) line 226
alloc_lrecord_array(long 0x010c572b, int 0x110e6000, const lrecord_implementation * 0x117917c7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0006d741, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00521718) line 226
alloc_lrecord_array(long 0x010c572b, int 0x10bc4000, const lrecord_implementation * 0x110e5717) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00054319, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x003f2538) line 226
alloc_lrecord_array(long 0x010c572b, int 0x107d1000, const lrecord_implementation * 0x10bc3537) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00040c37, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x003092a0) line 226
alloc_lrecord_array(long 0x010c572b, int 0x104c7000, const lrecord_implementation * 0x107d029f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00031d0f, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00255cc0) line 226
alloc_lrecord_array(long 0x010c572b, int 0x10271000, const lrecord_implementation * 0x104c6cbf) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0002650d, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x001cbca8) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0bdeb000, const lrecord_implementation * 0x0bfb6ca7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0001d791, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00161ad8) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0bc89000, const lrecord_implementation * 0x0bdeaad7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00016abd, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x001100e8) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0bb78000, const lrecord_implementation * 0x0bc880e7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00011705, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x000d1448) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0baa6000, const lrecord_implementation * 0x0bb77447) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000d69d, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x000a0f68) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0ba05000, const lrecord_implementation * 0x0baa5f67) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000a511, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x0007bcd8) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b989000, const lrecord_implementation * 0x0ba04cd7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00007eeb, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x0005f310) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b929000, const lrecord_implementation * 0x0b98830f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000619d, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00049368) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b4a4000, const lrecord_implementation * 0x0b4ed367) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00004b13, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x000384f0) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b46b000, const lrecord_implementation * 0x0b4a34ef) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x000039bf, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x0002b500) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b5f3000, const lrecord_implementation * 0x0b61e4ff) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00002c69, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x000214f8) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b5d1000, const lrecord_implementation * 0x0b5f24f7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00002221, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00019998) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b5b7000, const lrecord_implementation * 0x0b5d0997) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00001a3f, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00013b00) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b181000, const lrecord_implementation * 0x0b194aff) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000142f, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x0000f240) line 226
alloc_lrecord_array(long 0x010c572b, int 0x0b171000, const lrecord_implementation * 0x0b18023f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00000f7f, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x0000ba00) line 226
alloc_lrecord_array(long 0x010c572b, int 0x08cf8000, const lrecord_implementation * 0x08d039ff) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00000bdd, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00008e68) line 226
alloc_lrecord_array(long 0x010c572b, int 0x06a1f000, const lrecord_implementation * 0x06a27e67) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000091d, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00006d68) line 226
alloc_lrecord_array(long 0x010c572b, int 0x069a1000, const lrecord_implementation * 0x069a7d67) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x000006f1, long 0x066bff18) line 1168 + 93 bytes
profile_record_consing(long 0x00000008) line 226
alloc_lrecord(long 0x010db7cb, const lrecord_implementation * 0x013fc700 _regex_malloc_disallowed) line 590 + 88 bytes
record_unwind_protect_restoring_int(int * 0x024ef2e0, int 0x0247a799) line 6030 + 11 bytes
profile_record_just_called(backtrace * 0x052820c0) line 308
Fstring_equal(long 0x01236d6d, long 0x013fd760) line 311 + 656 bytes
fast_string_match(long 0x01236daf, const unsigned char * 0x05283640, long 0x013fd760, long 0x0615f4e0, long 0x00000000, int 0x0000003b, _error_behavior_struct_ {...}, int 0x0000029a) line 571 + 31 bytes
fast_lisp_string_match(long 0x05283640, long 0x0615f4e0) line 579 + 31 bytes
Ffind_file_name_handler(long 0x0615f4e0, long 0x055fea50) line 290 + 20 bytes
Ffile_modes(long 0x024a2880) line 2636 + 46 bytes
find_symbol_value_1(long 0x0107efa2, buffer * 0x00000001, console * 0x0082ee04, int 0x00000000, long 0x024d7a08, int 0x024bfa68) line 1596 + 12 bytes
execute_optimized_program(const unsigned char *, int, long *) line 862 + 11 bytes
----------------------------------------------------------------------------
void
inchash_eq (Lisp_Object key, Lisp_Object table, EMACS_INT offset)
{
Lisp_Hash_Table *ht = XHASH_TABLE (table);
htentry *entries = ht->hentries;
htentry *probe = entries + HASHCODE (key, ht);
LINEAR_PROBING_LOOP (probe, entries, ht->size)
if (EQ (probe->key, key))
break;
if (!HTENTRY_CLEAR_P (probe))
probe->value = make_int (XINT (probe->value) + offset);
else
{
probe->key = key;
=> probe->value = make_int (offset);
----------------------------------------------------------------------------
void
profile_record_just_called (struct backtrace *bt)
{
in_profiling++;
profile_reap_backtrace (bt);
=>in_profiling--;
}
----------------------------------------------------------------------------
- bt 0x052820c0
+ next 0x3b592843
+ function 0x00000016
+ args 0x762f2f5e
nargs 0x5b776569
pdlcount 0x5c5d2f5c
evalargs 0x28 '('
debug_on_exit 0x5b '['
function_being_called 0x5e '^'
current_total_timing_val 0x5c2a5d2f
current_total_gc_usage_val 0x00002429
total_ticks_at_start 0x3b593443
total_consing_at_start 0x00000015
in_profiling 0x00000019
============================================================================
----------------------------------------------------------------------------
static Lisp_Object
current_profile_function (void)
{
Lisp_Object fun;
struct backtrace *bt = backtrace_list;
int i;
if (bt < (void*) 1000)
{
return QSunknown;
}
/* 2 because we set in_profiling when we entered the current routine. */
if (in_profiling >= 2)
return QSprofile_overhead;
/* Find a function actually being called. Potentially (?) there could be
a number of non-calling funs -- calling foo autoloads, which tries to
call bar, but requires evalling its args first, which calls baz, ...
If profiling was not enabled when the function was called, just treat
the function as actually called, because the info about whether we've
finished the preamble will not have been recorded. */
for (i = 0; bt && !bt->function_being_called; i++)
{
if (bt < (void*) 1000)
{
#if 0
stderr_out ("bt of iteration %d is %x in current_profile_function()\n",
i, bt);
#endif
return QSunknown;
}
else {
bt = bt->next;
if (bt < (void*) 1000)
{
#if 0
stderr_out ("next bt of iteration %d is %x in current_profile_function()\n",
i, bt);
#endif
return QSunknown;
}
}
}
if (bt)
{
if (bt < (void*) 1000)
{
#if 0
stderr_out ("bt is %x in current_profile_function(), avoiding to deref *bt->function\n",
bt);
#endif
return QSunknown;
}
fun = *bt->function;
if (!SYMBOLP (fun)
&& !COMPILED_FUNCTIONP (fun)
&& !SUBRP (fun)
&& !CONSP (fun)
=> && !STRINGP (fun))
----------------------------------------------------------------------------
============================================================================
----------------------------------------------------------------------------
Fatal error: assertion failed, file c:\Hacking\cvs.xemacs.org\XEmacs\xemacs-21.5
-clean\src\gc.c, line 997, GCLI_lh->type < (unsigned int) lrecord_type_count
Fatal error.
Your files have been auto-saved.
Use `M-x recover-session' to recover them.
Your version of XEmacs was distributed with a PROBLEMS file that may describe
your crash, and with luck a workaround. Please check it first, but do report
the crash anyway.
Please report this bug by invoking M-x report-emacs-bug, or by selecting
`Send Bug Report' from the Help menu. If that won't work, send ordinary
email to `xemacs-beta at xemacs.org'. *MAKE SURE* to include this entire
output from this crash, especially including the Lisp backtrace, as well as
the XEmacs configuration from M-x describe-installation (or equivalently,
the file `Installation' in the top of the build tree).
If you are fortunate enough to have some sort of debugging aid installed
on your system, for example Visual C++, and you can get a C stack backtrace,
*please* include it, as it will make our life far easier.
Lisp backtrace follows:
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# bind (ignore-invisible-lines-flag end start)
count-lines(375326 375326)
# (unwind-protect ...)
# bind (i first art-begin head-begin head-end body-begin body-end)
nndoc-dissect-buffer()
# (unwind-protect ...)
# bind (buf source group)
nndoc-possibly-change-buffer("\\Users\\AichnerAd\\.gnuslog:.gnuslog" "c:\\User
s\\AichnerAd\\.gnuslog")
# bind (number dont-check server group)
nndoc-request-group("\\Users\\AichnerAd\\.gnuslog:.gnuslog" "c:\\Users\\Aichne
rAd\\.gnuslog" nil)
# bind (gnus-command-method group dont-check gnus-command-method)
byte-code("..." [gnus-server-method-cache group servers opened server method n
il intern-soft gnus-group-name-to-method 2 4 "native" assoc format "%s:%s" mapca
r #<compiled-function (info) "...(27)" [match server method info info-server inf
B??~~?????~B? *??" [name-method name gnus-select-method alists gnus-server-met
hod-cache method mapc #<compiled-function (name-method) "...(12)" [method name-m
ethod throw server-name] 3> #<compiled-function (server-alist) "...(5)" [server-
alist mapc #<compiled-function (name-method) "...(22)" [method gnus-server-metho
d-cache name-method gnus-methods-equal-p throw server-name] 3>] 3> "native" (nil
"") format "%s" "%s:%s" gnus-server-alist gnus-predefined-server-alist] 5)] 3>
"+" intern "%s-address" "" symbol-name address "-address" physical-address appen
d #<compiled-function (info) "...(27)" [match server method info info-server inf
B??~~?????~B? *??" [name-method name gnus-select-method alists gnus-server-met
hod-cache method mapc #<compiled-function (name-method) "...(12)" [method name-m
ethod throw server-name] 3> #<compiled-function (server-alist) "...(5)" [server-
alist mapc #<compiled-function (name-method) "...(22)" [method gnus-server-metho
d-cache name-method gnus-methods-equal-p throw server-name] 3>] 3> "native" (nil
"") format "%s" "%s:%s" gnus-server-alist gnus-predefined-server-alist] 5)] 3>
request-group error "Attempted use of a nil select method" gnus-online require n
nagent gnus-method-functions "%s-%s" put fboundp "Trying to require a method tha
t doesn't exist" "No such function: %s" string-match "^[^:]+:" 0 result gnus-com
mand-method match func gnus-select-method info gnus-opened-servers method-name .
..] 8)
# (condition-case ... . ((quit (message "Quit activating %s" group) nil)))
# bind (method active method dont-check scan group)
gnus-activate-group("nndoc+c:\\Users\\AichnerAd\\.gnuslog:.gnuslog" scan)
# bind (method-type cmethod retrieve-groups method active group info scanned-m
ethods type-cache methods-cache foreign-level level newsrc level)
gnus-get-unread-articles(nil)
# bind (gnus-inhibit-demon nnmail-fetched-sources arg)
gnus-group-get-new-news(nil)
# bind (command-debug-status)
call-interactively(gnus-group-get-new-news)
(dispatch-event "[internal]")
# (condition-case ... . error)
# (catch top-level ...)
----------------------------------------------------------------------------
assert_failed(const char * 0x02625a00, int 0x02873418, const char * 0x0082ea44) line 3982
gc_incremental() line 1980 + 370 bytes
find_symbol_value_1(long 0x012562c4, buffer * 0x024e4bb8, console * 0x0c96d000, int 0x0280ed00, long 0x00000001, int 0x024e61c8) line 1596 + 12 bytes
find_symbol_value(long 0x024e4bb8) line 1672 + 24 bytes
Fsymbol_value(long 0x0000002e) line 1722
execute_optimized_program(const unsigned char * 0x02873418, int 0x0082ea3c, long * 0x02564b90) line 682 + 109 bytes
Ffuncall(int 0x0107efa2, long * 0x00000002) line 3961 + 874 bytes
execute_optimized_program(const unsigned char * 0x08e672bf, int 0x0082eafc, long * 0x054b9c10) line 862 + 11 bytes
Ffuncall(int 0x0107efa2, long * 0x00000000) line 3961 + 874 bytes
execute_optimized_program(const unsigned char * 0x088c9774, int 0x0082ebcc, long * 0x056e15b4) line 862 + 11 bytes
Ffuncall(int 0x0107efa2, long * 0x00000000) line 3961 + 874 bytes
execute_optimized_program(const unsigned char * 0x0b99018e, int 0x0082ec8c, long * 0x057922a8) line 862 + 11 bytes
Ffuncall(int 0x0107efa2, long * 0x00000000) line 3961 + 874 bytes
execute_optimized_program(const unsigned char * 0x0082f10b, int 0x0082ed50, long * 0x05ba9650) line 862 + 11 bytes
Fbyte_code(long 0x05b58ff0, long 0x05ba9648, long 0x00000011) line 2622 + 44 bytes
Feval(long 0x05ccc870) line 3675 + 69 bytes
condition_case_1(long 0x05ccd288, long (long)* 0x010d3e40 Feval(long), long 0x05ccc870, long (long, long)* 0x010cf1f0 run_condition_case_handlers(long, long), long 0x024e61c8) line 1945 + 36 bytes
condition_case_3(long 0x05ccc870, long 0x024e61c8, long 0x024e61c8) line 2038 + 22 bytes
execute_rare_opcode(long * 0x0107ed53, const unsigned char * 0x00000013, Opcode 0x024e4f90) line 1438 + 13 bytes
execute_optimized_program(const unsigned char * 0x0c220d98, int 0x024e61c8, long * 0x9c6de459) line 682 + 109 bytes
============================================================================
oddball crash with DAMAGE: popup from Visual Studio, I press [Retry] to debug
----------------------------------------------------------------------------
void __cdecl _free_dbg_lk(
#else /* _MT */
_CRTIMP void __cdecl _free_dbg(
#endif /* _MT */
void * pUserData,
int nBlockUse
)
{
_CrtMemBlockHeader * pHead;
/* verify heap before freeing */
if (_crtDbgFlag & _CRTDBG_CHECK_ALWAYS_DF)
_ASSERTE(_CrtCheckMemory());
if (pUserData == NULL)
return;
/* forced failure */
if (!(*_pfnAllocHook)(_HOOK_FREE, pUserData, 0, nBlockUse, 0L, NULL, 0))
{
_RPT0(_CRT_WARN, "Client hook free failure.\n");
return;
}
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));
/* get a pointer to memory block header */
pHead = pHdr(pUserData);
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
/* if we didn't already check entire heap, at least check this object */
if (!(_crtDbgFlag & _CRTDBG_CHECK_ALWAYS_DF))
{
/* check no-mans-land gaps */
if (!CheckBytes(pHead->gap, _bNoMansLandFill, nNoMansLandSize))
_RPT3(_CRT_ERROR, "DAMAGE: before %hs block (#%d) at 0x%08X.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead));
if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize))
_RPT3(_CRT_ERROR, "DAMAGE: after %hs block (#%d) at 0x%08X.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
=> (BYTE *) pbData(pHead));
----------------------------------------------------------------------------
pUserData 0x039ab780
nBlockUse 0x00000001
pHead 0x039ab760
----------------------------------------------------------------------------
DEFUN ("kill-buffer", Fkill_buffer, 1, 1, "bKill buffer: ", /*
Kill the buffer BUFFER.
The argument may be a buffer or may be the name of a buffer.
An argument of nil means kill the current buffer.
Value is t if the buffer is actually killed, nil if user says no.
The value of `kill-buffer-hook' (which may be local to that buffer),
if not void, is a list of functions to be called, with no arguments,
before the buffer is actually killed. The buffer to be killed is current
when the hook functions are called.
Any processes that have this buffer as the `process-buffer' are killed
with `delete-process'.
*/
(buffer))
{
/* This function can call lisp */
Lisp_Object buf;
REGISTER struct buffer *b;
struct gcpro gcpro1;
if (NILP (buffer))
buf = Fcurrent_buffer ();
else if (BUFFERP (buffer))
buf = buffer;
else
{
buf = get_buffer (buffer, 0);
if (NILP (buf)) nsberror (buffer);
}
b = XBUFFER (buf);
/* OK to delete an already-deleted buffer. */
if (!BUFFER_LIVE_P (b))
return Qnil;
check_allowed_operation (OPERATION_DELETE_OBJECT, buf, Qnil);
/* Don't kill the minibuffer now current. */
if (EQ (buf, Vminibuffer_zero))
return Qnil;
/* Or the echo area. */
if (EQ (buf, Vecho_area_buffer))
return Qnil;
/* Query if the buffer is still modified. */
if (INTERACTIVE && !NILP (b->filename)
&& BUF_MODIFF (b) > BUF_SAVE_MODIFF (b))
{
Lisp_Object killp;
GCPRO1 (buf);
killp =
call1 (Qyes_or_no_p,
(emacs_sprintf_string ("Buffer %s modified; kill anyway? ",
XSTRING_DATA (b->name))));
=> UNGCPRO;
----------------------------------------------------------------------------
static Lisp_Object
run_condition_case_handlers (Lisp_Object val, Lisp_Object var)
{
/* This function can GC */
#if 0 /* FSFmacs */
if (!NILP (h.var))
specbind (h.var, c.val);
val = Fprogn (Fcdr (h.chosen_clause));
/* Note that this just undoes the binding of h.var; whoever
longjmp()ed to us unwound the stack to c.pdlcount before
throwing. */
unbind_to (c.pdlcount);
return val;
#else
int speccount;
CHECK_TRUE_LIST (val);
if (NILP (var))
return Fprogn (Fcdr (val)); /* tail call */
speccount = specpdl_depth();
specbind (var, Fcar (val));
val = Fprogn (Fcdr (val));
return unbind_to_1 (speccount, val);
----------------------------------------------------------------------------
Lisp_Object
condition_case_1 (Lisp_Object handlers,
Lisp_Object (*bfun) (Lisp_Object barg),
Lisp_Object barg,
Lisp_Object (*hfun) (Lisp_Object val, Lisp_Object harg),
Lisp_Object harg)
{
int speccount = specpdl_depth();
struct catchtag c;
#if 1
struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
#else
struct gcpro gcpro1;
#endif
#if 0 /* FSFmacs */
c.tag = Qnil;
#else
/* Do consing now so out-of-memory error happens up front */
/* (unbound . stuff) is a special condition-case kludge marker
which is known specially by Fsignal.
[[ This is an abomination, but to fix it would require either
making condition_case cons (a union of the conditions of the clauses)
or changing the byte-compiler output (no thanks).]]
The above comment is clearly wrong. FSF does not do it this way
and did not change the byte-compiler output. Instead they use a
`struct handler' to hold the various values (in place of our
Vcondition_handlers) and chain them together, with pointers from
the `struct catchtag' to the `struct handler'. We should perhaps
consider moving to something similar, but not before I merge my
stderr-proc workspace, which contains changes to these
functions. --ben */
c.tag = noseeum_cons (noseeum_cons (Qunbound, handlers),
Vcondition_handlers);
#endif
c.val = Qnil;
c.actual_tag = Qnil;
c.backtrace = Qnil;
c.backlist = backtrace_list;
#if 0 /* FSFmacs */
/* #### */
c.handlerlist = handlerlist;
#endif
c.lisp_eval_depth = lisp_eval_depth;
c.pdlcount = specpdl_depth();
#if 0 /* FSFmacs */
c.poll_suppress_count = async_timer_suppress_count;
#endif
c.gcpro = gcprolist;
/* #### FSFmacs does the following statement *after* the setjmp(). */
#if 1
c.next = catchlist;
#endif
if (SETJMP (c.jmp))
{
#if 1
GCPRO2(harg, c.val);
#endif
/* throw does ungcpro, etc */
#if 1
=> RETURN_UNGCPRO ((*hfun) (c.val, harg));
============================================================================
pretty early crash
----------------------------------------------------------------------------
Fatal error: assertion failed, file c:\Hacking\cvs.xemacs.org\XEmacs\xemacs-21.5
-clean\src\gc.c, line 997, GCLI_lh->type < (unsigned int) lrecord_type_count
Fatal error.
Your files have been auto-saved.
Use `M-x recover-session' to recover them.
Your version of XEmacs was distributed with a PROBLEMS file that may describe
your crash, and with luck a workaround. Please check it first, but do report
the crash anyway.
Please report this bug by invoking M-x report-emacs-bug, or by selecting
`Send Bug Report' from the Help menu. If that won't work, send ordinary
email to `xemacs-beta at xemacs.org'. *MAKE SURE* to include this entire
output from this crash, especially including the Lisp backtrace, as well as
the XEmacs configuration from M-x describe-installation (or equivalently,
the file `Installation' in the top of the build tree).
If you are fortunate enough to have some sort of debugging aid installed
on your system, for example Visual C++, and you can get a C stack backtrace,
*please* include it, as it will make our life far easier.
Lisp backtrace follows:
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
garbage-collect()
# bind (idle-time buf-size delay-level now delay)
auto-save-itimer()
# bind (time-elapsed itimers itimer next-wakeup last-event-time this-command i
nhibit-quit quit-flag current-itimer)
# (unwind-protect ...)
# bind (match-data)
byte-code("..." [this-command inhibit-quit quit-flag match-data itimer current
-itimer match-data ((store-match-data match-data)) nil itimer-uses-arguments app
ly itimer-function itimer-function-arguments last-event-time next-wakeup itimers
time-elapsed] 5)
# (condition-case ... . ((error (byte-code "?-?+?- !?!#??" [condition-data
itimer message "itimer \"%s\" signaled: %s" itimer-name prin1-to-string] 5)) (qu
it (byte-code "?-?-?!\"??" [itimer message "itimer \"%s\" quit" itimer-name] 4))
))
# (unwind-protect ...)
# bind (itimers itimer next-wakeup idle-time last-event-time recorded-run-time
inhibit-quit time-elapsed)
itimer-run-expired-timers(0.25)
# bind (sleep elapsed now itimer-inside-driver inhibit-quit ignored)
itimer-timer-driver(nil)
("execute_internal_event()" "[internal]")
(dispatch-event "[internal]")
# (condition-case ... . error)
# (catch top-level ...)
----------------------------------------------------------------------------
assert_failed(const char * 0x00000000, int 0x0082f6e8, const char * 0x010726bc) line 3982
gc_full() line 1960 + 285 bytes
Ffuncall(int 0x0107efa2, long * 0x00000000) line 3921 + 19 bytes
execute_optimized_program(const unsigned char * 0x08039bb2, int 0x0082f6e0, long * 0x027132f0) line 862 + 11 bytes
Ffuncall(int 0x0107efa2, long * 0x00000000) line 3961 + 874 bytes
execute_optimized_program(const unsigned char * 0x0082f81b, int 0x0082f7a0, long * 0x0271e5f8) line 862 + 11 bytes
Fbyte_code(long 0x0252e7d0, long 0x0271e5f0, long 0x0000000b) line 2622 + 44 bytes
Feval(long 0x026ea4b0) line 3675 + 69 bytes
condition_case_1(long 0x026ea438, long (long)* 0x010d3e40 Feval(long), long 0x026ea4b0, long (long, long)* 0x010cf1f0 run_condition_case_handlers(long, long), long 0x024caf78) line 1945 + 36 bytes
condition_case_3(long 0x026ea4b0, long 0x024caf78, long 0x024e61c8) line 2038 + 22 bytes
execute_rare_opcode(long * 0x0107ed53, const unsigned char * 0x00000007, Opcode 0x0082fb44) line 1438 + 13 bytes
execute_optimized_program(const unsigned char * 0x00000000, int 0x00000000, long * 0xa76df00c) line 682 + 109 bytes
----------------------------------------------------------------------------
void
gc_full (void)
=>{
gc (0);
}
============================================================================
No crashes (long runnning and two hibernation cycles) with early unconditional exit from current_profile_function with QSunknown.
----------------------------------------------------------------------------
(profiling-active-p)
t
t
t
t
t
t
t
(get-profiling-info)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 25218039) 0x3273e6> total-timing #<hash-table test eq size 2501/5167 data (font-lock-lisp-like 6 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 0 frame-modified-tick 0 w3m-favicon-usable-p 947 ...) 0x32d41c> call-count #<hash-table test eq size 2498/5167 data (font-lock-lisp-like 117 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 3 frame-modified-tick 24798 w3m-favicon-usable-p 1 ...) 0x32abbb> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" -4463364) 0x329dd6> total-gc-usage #<hash-table test eq size 2500/5167 data (font-lock-lisp-like 5400 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 1260 frame-modified-tick 0 w3m-favicon-usable-p 20344 ...) 0x327575>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 25194762) 0x3eb38d> total-timing #<hash-table test eq size 2477/5167 data (font-lock-lisp-like 6 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 0 frame-modified-tick 0 w3m-favicon-usable-p 947 ...) 0x3f13c3> call-count #<hash-table test eq size 2474/5167 data (font-lock-lisp-like 111 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 3 frame-modified-tick 23073 w3m-favicon-usable-p 1 ...) 0x3eeb62> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" -2073428) 0x3edd7d> total-gc-usage #<hash-table test eq size 2476/5167 data (font-lock-lisp-like 5160 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 1260 frame-modified-tick 0 w3m-favicon-usable-p 20344 ...) 0x3eb51c>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 25046957) 0x3ed474> total-timing #<hash-table test eq size 2458/5167 data (font-lock-lisp-like 4 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 0 frame-modified-tick 0 w3m-favicon-usable-p 947 ...) 0x3f34aa> call-count #<hash-table test eq size 2455/5167 data (font-lock-lisp-like 96 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 2 frame-modified-tick 13825 w3m-favicon-usable-p 1 ...) 0x3f0c49> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 9570876) 0x3efe64> total-gc-usage #<hash-table test eq size 2457/5167 data (font-lock-lisp-like 4440 #<compiled-function nil "...(179)" [len foo completion buffer-string status char try-completion minibuffer-do-completion-1 none ding nil no-completion temp-minibuffer-message " [No match]" unique " [Sole completion]" t uncompleted exact #<compiled-function (s) "...(5)" [nil (byte-code "?
P #?~db~c~?~" [minibuffer-completion-predicate minibuffer-completion-table buffer-string s try-completion t] 4) ((error))] 3> characterp 0 char-to-string ?\ " " ?- "-" minibuffer-completion-help " [Complete, but not unique]" " [Ambiguous]" erase-buffer match (byte-code "?
W?~? H~H~\"?~T~?j???\"~?b?~" [completion buffer-string len n 0 char-equal throw match nil t] 5) re-search-forward "\\W" minibuffer-completion-table minibuffer-completion-predicate last-command-char completion-auto-help n] 5 ("c:\\Hacking\\cvs.xemacs.org\\XEmacs\\xemacs-21.5-clean\\lisp\\minibuf.elc" . 18843) nil> 872 frame-modified-tick 0 w3m-favicon-usable-p 20344 ...) 0x3ed603>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 24840958) 0x29dc3a> total-timing #<hash-table test eq size 1835/3967 data (pending-delete-active-region 0 nndoc-news-type-p 1 ibuffer-clear-summary-columns 0 event-to-character 0 ...) 0x2a29b0> call-count #<hash-table test eq size 1832/3967 data (pending-delete-active-region 55 nndoc-news-type-p 19 ibuffer-clear-summary-columns 23 event-to-character 28 ...) 0x2a0aaf> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" -3880772) 0x29fcca> total-gc-usage #<hash-table test eq size 1834/3967 data (pending-delete-active-region 0 nndoc-news-type-p 1064 ibuffer-clear-summary-columns 0 event-to-character 0 ...) 0x29ddc9>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 24827060) 0x128623> total-timing #<hash-table test eq size 1797/3037 data (add-hook 0 position 31 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x12c511> call-count #<hash-table test eq size 1794/3037 data (add-hook 20 position 588 set-window-dedicated-p 16 gnus-summary-position-point 13 ...) 0x12ad54> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 8739900) 0x129f6f> total-gc-usage #<hash-table test eq size 1796/3037 data (add-hook 180 position 123744 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x1287b2>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 80013) 0x3e4342> total-timing #<hash-table test eq size 1785/3037 data (add-hook 0 position 31 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x3e8230> call-count #<hash-table test eq size 1782/3037 data (add-hook 20 position 558 set-window-dedicated-p 16 gnus-summary-position-point 13 ...) 0x3e6a73> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 13765268) 0x3e5c8e> total-gc-usage #<hash-table test eq size 1784/3037 data (add-hook 180 position 117632 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x3e44d1>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 79377) 0x3bbffb> total-timing #<hash-table test eq size 1771/3037 data (add-hook 0 position 30 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x3bfee9> call-count #<hash-table test eq size 1768/3037 data (add-hook 20 position 542 set-window-dedicated-p 16 gnus-summary-position-point 13 ...) 0x3be72c> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 11718484) 0x3bd947> total-gc-usage #<hash-table test eq size 1770/3037 data (add-hook 180 position 114532 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x3bc18a>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 76515) 0x29115c> total-timing #<hash-table test eq size 1770/3037 data (add-hook 0 position 28 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x29504a> call-count #<hash-table test eq size 1767/3037 data (add-hook 20 position 497 set-window-dedicated-p 16 gnus-summary-position-point 13 ...) 0x29388d> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" -3644916) 0x292aa8> total-gc-usage #<hash-table test eq size 1769/3037 data (add-hook 180 position 105508 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x2912eb>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 35115) 0x17a04f> total-timing #<hash-table test eq size 1689/3037 data (add-hook 0 position 20 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x17df3d> call-count #<hash-table test eq size 1686/3037 data (add-hook 20 position 401 set-window-dedicated-p 16 gnus-summary-position-point 13 ...) 0x17c780> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 7221836) 0x17b99b> total-gc-usage #<hash-table test eq size 1688/3037 data (add-hook 180 position 84528 set-window-dedicated-p 0 gnus-summary-position-point 0 ...) 0x17a1de>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 11247) 0x130a31> total-timing #<hash-table test eq size 1010/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 15 gnus-message 39 completer-match-record 0 font-lock-fontify-pending-extents 3 ...) 0x133e1f> call-count #<hash-table test eq size 1007/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 171 gnus-message 80 completer-match-record 3 font-lock-fontify-pending-extents 13 ...) 0x132be2> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 12018524) 0x131dfd> total-gc-usage #<hash-table test eq size 1009/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 57236 gnus-message 153776 completer-match-record 1724 font-lock-fontify-pending-extents 3796 ...) 0x130bc0>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 11083) 0x11ba4e> total-timing #<hash-table test eq size 1010/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 15 gnus-message 39 completer-match-record 0 font-lock-fontify-pending-extents 3 ...) 0x11ee3c> call-count #<hash-table test eq size 1007/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 171 gnus-message 80 completer-match-record 3 font-lock-fontify-pending-extents 13 ...) 0x11dbff> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 11076100) 0x11ce1a> total-gc-usage #<hash-table test eq size 1009/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 57236 gnus-message 153776 completer-match-record 1724 font-lock-fontify-pending-extents 3796 ...) 0x11bbdd>)
(timing #<hash-table test equal size 1/197 data ("(unknown)" 10988) 0x10f715> total-timing #<hash-table test eq size 1006/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 15 gnus-message 39 completer-match-record 0 font-lock-fontify-pending-extents 3 ...) 0x112b03> call-count #<hash-table test eq size 1004/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 171 gnus-message 80 completer-match-record 3 font-lock-fontify-pending-extents 13 ...) 0x1118c6> gc-usage #<hash-table test eq size 1/1777 data ("(unknown)" 10556028) 0x110ae1> total-gc-usage #<hash-table test eq size 1005/2333 data (#<compiled-function (buf) "...(10)" [buffers-tab-filter-functions buf tmp-buf mapc #<compiled-function (fun) "...(11)" [tmp-buf first-buf buf fun nil] 3>] 3> 57236 gnus-message 153776 completer-match-record 1724 font-lock-fontify-pending-extents 3796 ...) 0x10f8a4>)
============================================================================
Took a long time to crash this time with my extensive stderr_out code,
which never triggered so far!
----------------------------------------------------------------------------
current_profile_function() line 196 + 7 bytes
sigprof_handler(int 0x0000001d) line 323 + 5 bytes
setitimer_helper_proc(unsigned int 0x00006251, unsigned int 0x00000000, unsigned long 0x0000001d, unsigned long 0x00000000, unsigned long 0x00000000) line 788 + 19 bytes
WINMM! 76b454f3()
WINMM! 76b5ae36()
WINMM! 76b5af3a()
KERNEL32! 7c80b50b()
----------------------------------------------------------------------------
static Lisp_Object
current_profile_function (void)
{
Lisp_Object fun;
struct backtrace *bt = backtrace_list;
int i;
/* 2 because we set in_profiling when we entered the current routine. */
if (in_profiling >= 2)
return QSprofile_overhead;
/* Find a function actually being called. Potentially (?) there could be
a number of non-calling funs -- calling foo autoloads, which tries to
call bar, but requires evalling its args first, which calls baz, ...
If profiling was not enabled when the function was called, just treat
the function as actually called, because the info about whether we've
finished the preamble will not have been recorded. */
for (i = 0; bt && !bt->function_being_called; i++)
{
if (bt < (void*) 1000)
{
stderr_out ("bt of iteration %d is %x in current_profile_function()\n",
i, bt);
return QSprocessing_events_at_top_level;
}
else {
bt = bt->next;
if (bt < (void*) 1000)
{
stderr_out ("next bt of iteration %d is %x in current_profile_function()\n",
i, bt);
return QSprocessing_events_at_top_level;
}
}
}
if (bt)
{
fun = *bt->function;
if (!SYMBOLP (fun)
&& !COMPILED_FUNCTIONP (fun)
&& !SUBRP (fun)
&& !CONSP (fun)
=> && !STRINGP (fun))
fun = QSunknown;
}
else
fun = QSprocessing_events_at_top_level;
return fun;
}
Stack might be unreliable at this time, like experienced before
----------------------------------------------------------------------------
line CXX0017: Error: symbol "line" not found
bt CXX0017: Error: symbol "bt" not found
- backtrace_list 0x0082fc30
- next 0x0082fc98
+ next 0x00000000
+ function 0x013f82a4 Qnext_event
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000001
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x0000027f
current_total_gc_usage_val 0x0020fed0
total_ticks_at_start 0x001619ac
total_consing_at_start 0xe5695b94
+ function 0x013f832c QSnext_event_internal
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000003
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000012
current_total_gc_usage_val 0x0000c6b4
total_ticks_at_start 0x001619ac
total_consing_at_start 0xe5695c48
&backtrace Error: cannot display value
bt CXX0017: Error: symbol "bt" not found
&bt CXX0017: Error: symbol "bt" not found
============================================================================
and another letting gnus idle for ca. 5 minutes unattended with profiling on.
----------------------------------------------------------------------------
current_profile_function() line 168 + 4 bytes
sigprof_handler(int 0x0000001d) line 306 + 5 bytes
setitimer_helper_proc(unsigned int 0x0000f631, unsigned int 0x00000000, unsigned long 0x0000001d, unsigned long 0x00000000, unsigned long 0x00000000) line 788 + 19 bytes
WINMM! 76b454f3()
WINMM! 76b5ae36()
WINMM! 76b5af3a()
KERNEL32! 7c80b50b()
----------------------------------------------------------------------------
- backtrace_list 0x0082fc30
- next 0x0082fc98
- next 0x00000000
next CXX0030: Error: expression cannot be evaluated
function CXX0030: Error: expression cannot be evaluated
args CXX0030: Error: expression cannot be evaluated
nargs CXX0030: Error: expression cannot be evaluated
pdlcount CXX0030: Error: expression cannot be evaluated
evalargs CXX0030: Error: expression cannot be evaluated
debug_on_exit CXX0030: Error: expression cannot be evaluated
function_being_called CXX0030: Error: expression cannot be evaluated
current_total_timing_val CXX0030: Error: expression cannot be evaluated
current_total_gc_usage_val CXX0030: Error: expression cannot be evaluated
total_ticks_at_start CXX0030: Error: expression cannot be evaluated
total_consing_at_start CXX0030: Error: expression cannot be evaluated
+ function 0x013f8224 Qnext_event
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000001
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000004
current_total_gc_usage_val 0x000719a8
total_ticks_at_start 0x000359cc
total_consing_at_start 0xff78f374
+ function 0x013f82ac QSnext_event_internal
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000003
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000002
current_total_gc_usage_val 0x00003b68
total_ticks_at_start 0x000359cc
total_consing_at_start 0xff78feb8
in_profiling 0x00000001
QSprofile_overhead 0x024ee580
============================================================================
provoked by playing tetris with profiling on.
Looks like another badly terminated next pointer with
function_being_called being zero. Hmmh, data does not support that theory!
This time not involving Qdispatch_event!
----------------------------------------------------------------------------
current_profile_function() line 168 + 4 bytes
sigprof_handler(int 0x0000001d) line 306 + 5 bytes
setitimer_helper_proc(unsigned int 0x0000f631, unsigned int 0x00000000, unsigned long 0x0000001d, unsigned long 0x00000000, unsigned long 0x00000000) line 788 + 19 bytes
WINMM! 76b454f3()
WINMM! 76b5ae36()
WINMM! 76b5af3a()
KERNEL32! 7c80b50b()
----------------------------------------------------------------------------
static Lisp_Object
current_profile_function (void)
{
Lisp_Object fun;
struct backtrace *bt = backtrace_list;
/* 2 because we set in_profiling when we entered the current routine. */
if (in_profiling >= 2)
return QSprofile_overhead;
/* Find a function actually being called. Potentially (?) there could be
a number of non-calling funs -- calling foo autoloads, which tries to
call bar, but requires evalling its args first, which calls baz, ...
If profiling was not enabled when the function was called, just treat
the function as actually called, because the info about whether we've
finished the preamble will not have been recorded. */
=>for (; bt && !bt->function_being_called; bt = bt->next)
----------------------------------------------------------------------------
- backtrace_list 0x0082fc30
- next 0x0082fc98
- next 0x00000000
next CXX0030: Error: expression cannot be evaluated
function CXX0030: Error: expression cannot be evaluated
args CXX0030: Error: expression cannot be evaluated
nargs CXX0030: Error: expression cannot be evaluated
pdlcount CXX0030: Error: expression cannot be evaluated
evalargs CXX0030: Error: expression cannot be evaluated
debug_on_exit CXX0030: Error: expression cannot be evaluated
function_being_called CXX0030: Error: expression cannot be evaluated
current_total_timing_val CXX0030: Error: expression cannot be evaluated
current_total_gc_usage_val CXX0030: Error: expression cannot be evaluated
total_ticks_at_start CXX0030: Error: expression cannot be evaluated
total_consing_at_start CXX0030: Error: expression cannot be evaluated
+ function 0x013f8224 Qnext_event
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000001
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00003634
current_total_gc_usage_val 0x063e23a8
total_ticks_at_start 0x00061ce3
total_consing_at_start 0xf9716e8c
+ function 0x013f82ac QSnext_event_internal
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000003
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x0000008e
current_total_gc_usage_val 0x00008d34
total_ticks_at_start 0x00061ce3
total_consing_at_start 0xf9716f40
in_profiling 0x00000001
QSprofile_overhead 0x024ee580
============================================================================
same reproducible crash as below:
occur PRE-COMMAND in $TEMP\command-reporting.txt
zero next pointer in bt record with function_being_called zero (why is
function_being_called shown as non-zero in debugger?)
again, + function 0x013f8280 Qdispatch_event
is the last valid record!
----------------------------------------------------------------------------
- backtrace_list 0x0082f4a0
- next 0x0082f6cc
- next 0x0082f7a0
- next 0x0082f85c
- next 0x0082f9b8
- next 0x0082fa30
- next 0x0082faf8
- next 0x0082fc00
- next 0x0082fc94
+ next 0x00000000
+ function 0x013f8280 Qdispatch_event
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000001
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x000037c0
total_ticks_at_start 0x000008aa
total_consing_at_start 0x01573b9c
+ function 0x013f75e8 _Qcall_interactively
+ args 0x0082fc2c
nargs 0x00000001
pdlcount 0x00000001
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x000008aa
total_consing_at_start 0x01573ed0
+ function 0x0082fb34
+ args 0x0082fb38
nargs 0x00000001
pdlcount 0x00000002
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x000008aa
total_consing_at_start 0x01573ed0
+ function 0x0082fa68
+ args 0x0082fa6c
nargs 0x00000002
pdlcount 0x00000005
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x000008d4
total_consing_at_start 0x01584a2c
+ function 0x013f75e8 _Qcall_interactively
+ args 0x0082f9e4
nargs 0x00000001
pdlcount 0x00000005
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000019
current_total_gc_usage_val 0x0000035c
total_ticks_at_start 0x00000927
total_consing_at_start 0x015d4d7c
+ function 0x0082f890
+ args 0x0082f894
nargs 0x00000002
pdlcount 0x00000005
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x00000937
total_consing_at_start 0x015e65d4
+ function 0x0082f7d8
+ args 0x0082f7dc
nargs 0x00000003
pdlcount 0x00000007
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x00000937
total_consing_at_start 0x015e6600
+ function 0x0082f704
+ args 0x0082f708
nargs 0x00000009
pdlcount 0x0000000f
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x00000938
total_consing_at_start 0x015e6fa8
+ function 0x013f84e4 long QSin_map_extents_internal
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x0000002d
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x0001fc8f
current_total_gc_usage_val 0x025165a8
total_ticks_at_start 0x00021bdb
total_consing_at_start 0xfcbc050c
in_profiling 0x00000001
QSprofile_overhead 0x024ee580
============================================================================
----------------------------------------------------------------------------
current_profile_function() line 168 + 4 bytes
sigprof_handler(int 0x0000001d) line 306 + 5 bytes
setitimer_helper_proc(unsigned int 0x00003461, unsigned int 0x00000000, unsigned long 0x0000001d, unsigned long 0x00000000, unsigned long 0x00000000) line 788 + 19 bytes
WINMM! 76b454f3()
WINMM! 76b5ae36()
WINMM! 76b5af3a()
KERNEL32! 7c80b50b()
----------------------------------------------------------------------------
- backtrace_list 0x0082f47c
- next 0x0082f6cc
- next 0x0082f7a0
- next 0x0082f85c
- next 0x0082f9b8
- next 0x0082fa30
- next 0x0082faf8
- next 0x0082fc00
- next 0x0082fc94
+ next 0x00000000
+ function 0x013f8280 Qdispatch_event
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x00000001
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00002000
total_ticks_at_start 0x0000194b
total_consing_at_start 0x01294a88
+ function 0x013f75e8 _Qcall_interactively
+ args 0x0082fc2c
nargs 0x00000001
pdlcount 0x00000001
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x0000194b
total_consing_at_start 0x01294d70
+ function 0x0082fb34
+ args 0x0082fb38
nargs 0x00000001
pdlcount 0x00000002
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x0000194b
total_consing_at_start 0x01294d70
+ function 0x0082fa68
+ args 0x0082fa6c
nargs 0x00000002
pdlcount 0x00000005
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x00001968
total_consing_at_start 0x012aa35c
+ function 0x013f75e8 _Qcall_interactively
+ args 0x0082f9e4
nargs 0x00000001
pdlcount 0x00000005
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000001
current_total_gc_usage_val 0x00000090
total_ticks_at_start 0x000019b9
total_consing_at_start 0x012faedc
+ function 0x0082f890
+ args 0x0082f894
nargs 0x00000002
pdlcount 0x00000005
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x000019c8
total_consing_at_start 0x0130d41c
+ function 0x0082f7d8
+ args 0x0082f7dc
nargs 0x00000003
pdlcount 0x00000007
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x000019c8
total_consing_at_start 0x0130d448
+ function 0x0082f704
+ args 0x0082f708
nargs 0x00000009
pdlcount 0x0000000f
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x00000000
current_total_gc_usage_val 0x00000000
total_ticks_at_start 0x000019c8
total_consing_at_start 0x0130ddac
+ function 0x013f84e4 long QSin_map_extents_internal
+ args 0x00000000
nargs 0xffffffff
pdlcount 0x0000002d
evalargs 0x00 ''
debug_on_exit 0x00 ''
function_being_called 0x01 ''
current_total_timing_val 0x000006ea
current_total_gc_usage_val 0xfe1aff3c
total_ticks_at_start 0x000021c3
total_consing_at_start 0xfffb10f8
in_profiling 0x00000001
QSprofile_overhead 0x024ee580
============================================================================
No lisp backtrace
inchash_eq(long 0x011f93f4, long 0x024ee580, long 0x08733150) line 1156
profile_record_consing(long 0x0130cff8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x16bd1000, const lrecord_implementation * 0x17eddff7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00138a07, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00ea7860) line 192
alloc_lrecord_array(long 0x010c572b, int 0x15663000, const lrecord_implementation * 0x1650a85f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x000f07ab, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00b45c10) line 192
alloc_lrecord_array(long 0x010c572b, int 0x14b1d000, const lrecord_implementation * 0x15662c0f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x000b8fbd, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x008abce8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x14271000, const lrecord_implementation * 0x14b1cce7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0008e4a5, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x006ab7c8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0e440000, const lrecord_implementation * 0x0eaeb7c7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0006d741, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00521718) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0df1e000, const lrecord_implementation * 0x0e43f717) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00054319, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x003f2538) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0db2b000, const lrecord_implementation * 0x0df1d537) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00040c37, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x003092a0) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0d821000, const lrecord_implementation * 0x0db2a29f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00031d0f, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00255cc0) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0d49b000, const lrecord_implementation * 0x0d6f0cbf) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0002650d, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x001cbca8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0d2cf000, const lrecord_implementation * 0x0d49aca7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0001d791, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00161ad8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0d16d000, const lrecord_implementation * 0x0d2cead7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00016abd, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x001100e8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0d05c000, const lrecord_implementation * 0x0d16c0e7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00011705, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x000d1448) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0cf8a000, const lrecord_implementation * 0x0d05b447) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000d69d, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x000a0f68) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0cee9000, const lrecord_implementation * 0x0cf89f67) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000a511, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x0007bcd8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0ce6d000, const lrecord_implementation * 0x0cee8cd7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00007eeb, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x0005f310) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0ce0d000, const lrecord_implementation * 0x0ce6c30f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000619d, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00049368) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0cdc3000, const lrecord_implementation * 0x0ce0c367) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00004b13, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x000384f0) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0b872000, const lrecord_implementation * 0x0b8aa4ef) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x000039bf, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x0002b500) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0b846000, const lrecord_implementation * 0x0b8714ff) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00002c69, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x000214f8) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0b814000, const lrecord_implementation * 0x0b8354f7) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00002221, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00019998) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0b78d000, const lrecord_implementation * 0x0b7a6997) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00001a3f, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00013b00) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0b7bd000, const lrecord_implementation * 0x0b7d0aff) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000142f, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x0000f240) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0b5bb000, const lrecord_implementation * 0x0b5ca23f) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00000f7f, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x0000ba00) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0caf6000, const lrecord_implementation * 0x0cb019ff) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x00000bdd, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00008e68) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0cceb000, const lrecord_implementation * 0x0ccf3e67) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x0000091d, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x00006d68) line 192
alloc_lrecord_array(long 0x010c572b, int 0x0cd42000, const lrecord_implementation * 0x0cd48d67) line 646 + 88 bytes
inchash_eq(long 0x011f93f4, long 0x000006f1, long 0x08733150) line 1168 + 93 bytes
profile_record_consing(long 0x0000000c) line 192
alloc_lrecord(long 0x010d5ec9, const lrecord_implementation * 0x081740dc) line 590 + 88 bytes
Ffuncall(int 0x010d74c3, long * 0x00000000) line 3961 + 61 bytes
run_hook_with_args_in_buffer(buffer * 0x010d71ae, int 0x024e61c8, long * 0x00000001, run_hooks_condition 0x0082f0a4) line 4444 + 13 bytes
Frun_hooks(int 0x00000001, long * 0x0082f0a4) line 4309 + 16 bytes
Ffuncall(int 0x0107efa2, long * 0x00000001) line 3945 + 9 bytes
execute_optimized_program(const unsigned char * 0x028d5e3a, int 0x0082f09c, long * 0x0255f178) line 862 + 11 bytes
Ffuncall(int 0x0107efa2, long * 0x00000002) line 3961 + 874 bytes
execute_optimized_program(const unsigned char * 0x08f373b9, int 0x0082f15c, long * 0x02724164) line 862 + 11 bytes
Ffuncall(int 0x0107efa2, long * 0x00000000) line 3961 + 874 bytes
execute_optimized_program(const unsigned char * 0x0082f274, int 0x0082f214, long * 0x0255dc60) line 862 + 11 bytes
Fbyte_code(long 0x0251c310, long 0x0255dc58, long 0x0000000f) line 2622 + 44 bytes
Feval(long 0x026ccfb4) line 3675 + 69 bytes
condition_case_1(long 0x026ccf84, long (long)* 0x010d3e40 Feval(long), long 0x026ccfb4, long (long, long)* 0x010cf1f0 run_condition_case_handlers(long, long), long 0x024e37e0) line 1945 + 36 bytes
condition_case_3(long 0x026ccfb4, long 0x024e37e0, long 0x024e61c8) line 2038 + 22 bytes
execute_rare_opcode(long * 0x01081265, const unsigned char * 0x00000000, Opcode 0x0107ed53) line 1438 + 13 bytes
optimize_compiled_function(long 0x026ccfa8) line 2065 + 18 bytes
024e5510()
----------------------------------------------------------------------------
/* A version of Fputhash() that increments the value by the specified
amount and dispenses will all error checks. Assumes that tables does
comparison using EQ. Used by the profiling routines to avoid
overhead -- profiling overhead was being recorded at up to 15% of the
total time. */
void
inchash_eq (Lisp_Object key, Lisp_Object table, EMACS_INT offset)
{
Lisp_Hash_Table *ht = XHASH_TABLE (table);
htentry *entries = ht->hentries;
htentry *probe = entries + HASHCODE (key, ht);
=>LINEAR_PROBING_LOOP (probe, entries, ht->size)
----------------------------------------------------------------------------
/* ARGS[0] should be a hook symbol.
Call each of the functions in the hook value, passing each of them
as arguments all the rest of ARGS (all NARGS - 1 elements).
COND specifies a condition to test after each call
to decide whether to stop.
The caller (or its caller, etc) must gcpro all of ARGS,
except that it isn't necessary to gcpro ARGS[0]. */
Lisp_Object
run_hook_with_args_in_buffer (struct buffer *buf, int nargs, Lisp_Object *args,
enum run_hooks_condition cond)
{
Lisp_Object sym, val, ret;
if (!initialized || preparing_for_armageddon)
/* We need to bail out of here pronto. */
return Qnil;
#ifndef NEW_GC
/* Whenever gc_in_progress is true, preparing_for_armageddon
will also be true unless something is really hosed. */
assert (!gc_in_progress);
#endif /* not NEW_GC */
sym = args[0];
val = symbol_value_in_buffer (sym, wrap_buffer (buf));
ret = (cond == RUN_HOOKS_UNTIL_FAILURE ? Qt : Qnil);
if (UNBOUNDP (val) || NILP (val))
return ret;
else if (!CONSP (val) || EQ (XCAR (val), Qlambda))
{
args[0] = val;
return Ffuncall (nargs, args);
}
else
{
struct gcpro gcpro1, gcpro2, gcpro3;
Lisp_Object globals = Qnil;
GCPRO3 (sym, val, globals);
for (;
CONSP (val) && ((cond == RUN_HOOKS_TO_COMPLETION)
|| (cond == RUN_HOOKS_UNTIL_SUCCESS ? NILP (ret)
: !NILP (ret)));
val = XCDR (val))
{
if (EQ (XCAR (val), Qt))
{
/* t indicates this hook has a local binding;
it means to run the global binding too. */
globals = Fdefault_value (sym);
if ((! CONSP (globals) || EQ (XCAR (globals), Qlambda)) &&
! NILP (globals))
{
args[0] = globals;
ret = Ffuncall (nargs, args);
}
else
{
for (;
CONSP (globals) && ((cond == RUN_HOOKS_TO_COMPLETION)
|| (cond == RUN_HOOKS_UNTIL_SUCCESS
? NILP (ret)
: !NILP (ret)));
globals = XCDR (globals))
{
args[0] = XCAR (globals);
/* In a global value, t should not occur. If it does, we
must ignore it to avoid an endless loop. */
if (!EQ (args[0], Qt))
ret = Ffuncall (nargs, args);
}
}
}
else
{
args[0] = XCAR (val);
=> ret = Ffuncall (nargs, args);
----------------------------------------------------------------------------
+ args 0x00000001
nargs 0x024e61c8
val 0x024ebe28
args IS AN INVALID POINTER!
----------------------------------------------------------------------------
============================================================================
XEmacs 21.5 (beta27) "fiddleheads" (+CVS-20060817) [Lucid] (i586-pc-win32, Mule) of Sun Aug 20 2006 on TANG
Fatal error: assertion failed, file c:\Hacking\cvs.xemacs.org\XEmacs\xemacs-21.5
-clean\src\redisplay-output.c, line 1687, db->xpos >= 0 && db->ypos >= 0
Fatal error.
Your files have been auto-saved.
Use `M-x recover-session' to recover them.
Your version of XEmacs was distributed with a PROBLEMS file that may describe
your crash, and with luck a workaround. Please check it first, but do report
the crash anyway.
Please report this bug by invoking M-x report-emacs-bug, or by selecting
`Send Bug Report' from the Help menu. If that won't work, send ordinary
email to `xemacs-beta at xemacs.org'. *MAKE SURE* to include this entire
output from this crash, especially including the Lisp backtrace, as well as
the XEmacs configuration from M-x describe-installation (or equivalently,
the file `Installation' in the top of the build tree).
If you are fortunate enough to have some sort of debugging aid installed
on your system, for example Visual C++, and you can get a C stack backtrace,
*please* include it, as it will make our life far easier.
Lisp backtrace follows:
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# bind (inhibit-quit)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
# (unwind-protect ...)
("(in redisplay)" "[internal]")
("next_event_internal()" "[internal]")
# (unwind-protect ...)
# bind (inhibit-quit)
(next-event "[internal]")
# (condition-case ... . error)
# (catch top-level ...)
----------------------------------------------------------------------------
assert_failed(const char * 0x0bcb9000, int 0x06131c30, const char * 0x0082ec50) line 3982
mswindows_output_display_block(window * 0x011fea47, display_line * 0x0bcb9000, int 0x01ebac10, int 0x00000000, int 0x00000000, int 0x00000012, int 0x00000000, int 0x00000000, int 0x00000000) line 1049
output_display_line(window * 0x012038f6, display_line_dynarr * 0x0bcb9000, display_line_dynarr * 0x01e20808, int 0x03caea90, int 0x00000000, int 0x00000000) line 743
redisplay_output_window(window * 0x01218bad) line 2448 + 13 bytes
redisplay_window(long 0x0121726a, int 0x0000000a) line 6541 + 6 bytes
redisplay_frame(frame * 0x01219c8c, int 0x02dd10a8) line 6950
redisplay_device(device * 0x0121970d, int 0x02dd10a8) line 7028 + 8 bytes
redisplay() line 7156 + 532 bytes
mswindows_wnd_proc(HWND__ * 0x37011937, unsigned int 0x00000000, unsigned int 0x24b61201, long 0x00000001) line 3811
007d0348()
----------------------------------------------------------------------------
/*****************************************************************************
mswindows_output_display_block
Given a display line, a block number for that start line, output all
runes between start and end in the specified display block.
Ripped off with minimal thought from the corresponding X routine.
****************************************************************************/
static void
mswindows_output_display_block (struct window *w, struct display_line *dl,
int block, int start, int end,
int start_pixpos, int cursor_start,
int cursor_width, int cursor_height)
{
struct frame *f = XFRAME (w->frame);
Ichar_dynarr *buf;
Lisp_Object window;
struct display_block *db = Dynarr_atp (dl->display_blocks, block);
rune_dynarr *rba = db->runes;
struct rune *rb;
int elt = start;
face_index findex;
int xpos, width;
Lisp_Object charset = Qunbound; /* Qnil is a valid charset when
MULE is not defined */
window = wrap_window (w);
rb = Dynarr_atp (rba, start);
if (!rb)
/* Nothing to do so don't do anything. */
return;
findex = rb->findex;
xpos = rb->xpos;
width = 0;
if (rb->type == RUNE_CHAR)
charset = ichar_charset (rb->object.chr.ch);
if (end < 0)
end = Dynarr_length (rba);
buf = Dynarr_new (Ichar);
while (elt < end)
{
rb = Dynarr_atp (rba, elt);
if (rb->findex == findex && rb->type == RUNE_CHAR
&& rb->object.chr.ch != '\n' && rb->cursor_type != CURSOR_ON
&& EQ (charset, ichar_charset (rb->object.chr.ch)))
{
Dynarr_add (buf, rb->object.chr.ch);
width += rb->width;
elt++;
}
else
{
if (Dynarr_length (buf))
{
mswindows_output_string (w, dl, buf, xpos, 0, start_pixpos,
width, findex, 0, 0, 0, 0);
xpos = rb->xpos;
width = 0;
}
Dynarr_reset (buf);
width = 0;
if (rb->type == RUNE_CHAR)
{
findex = rb->findex;
xpos = rb->xpos;
charset = ichar_charset (rb->object.chr.ch);
if (rb->cursor_type == CURSOR_ON)
{
if (rb->object.chr.ch == '\n')
{
mswindows_output_cursor (w, dl, xpos, cursor_width,
findex, 0, 0);
}
else
{
Dynarr_add (buf, rb->object.chr.ch);
mswindows_output_cursor (w, dl, xpos, cursor_width,
findex, rb->object.chr.ch, 0);
Dynarr_reset (buf);
}
xpos += rb->width;
elt++;
}
else if (rb->object.chr.ch == '\n')
{
/* Clear in case a cursor was formerly here. */
redisplay_clear_region (window, findex, xpos,
DISPLAY_LINE_YPOS (dl),
rb->width, DISPLAY_LINE_HEIGHT (dl));
elt++;
}
}
else if (rb->type == RUNE_BLANK || rb->type == RUNE_HLINE)
{
if (rb->type == RUNE_BLANK)
mswindows_output_blank (w, dl, rb, start_pixpos);
else
{
/* #### Our flagging of when we need to redraw the
modeline shadows sucks. Since RUNE_HLINE is only used
by the modeline at the moment it is a good bet
that if it gets redrawn then we should also
redraw the shadows. This won't be true forever.
We borrow the shadow_thickness_changed flag for
now. */
w->shadow_thickness_changed = 1;
mswindows_output_hline (w, dl, rb);
}
if (rb->cursor_type == CURSOR_ON)
mswindows_output_cursor (w, dl, xpos, cursor_width, rb->findex, 0, 0);
elt++;
if (elt < end)
{
rb = Dynarr_atp (rba, elt);
findex = rb->findex;
xpos = rb->xpos;
}
}
else if (rb->type == RUNE_DGLYPH)
{
Lisp_Object instance;
struct display_box dbox;
struct display_glyph_area dga;
redisplay_calculate_display_boxes (dl, rb->xpos, rb->object.dglyph.xoffset,
rb->object.dglyph.yoffset,
start_pixpos, rb->width, &dbox, &dga);
window = wrap_window (w);
instance = glyph_image_instance (rb->object.dglyph.glyph,
window, ERROR_ME_DEBUG_WARN, 1);
findex = rb->findex;
if (IMAGE_INSTANCEP (instance))
{
switch (XIMAGE_INSTANCE_TYPE (instance))
{
case IMAGE_MONO_PIXMAP:
case IMAGE_COLOR_PIXMAP:
redisplay_output_pixmap (w, instance, &dbox, &dga, findex,
cursor_start, cursor_width,
cursor_height, 0);
=> if (rb->cursor_type == CURSOR_ON)
----------------------------------------------------------------------------
cursor_height 0x00000000
cursor_start 0x00000000
cursor_width 0x00000000
+ &dbox 0x0082ec4c
+ &dga 0x0082ec5c
findex 0x0000001a
IMAGE_COLOR_PIXMAP 0x00000004
IMAGE_MONO_PIXMAP 0x00000003
instance 0x00000000
+ w 0x011fea47
============================================================================
-------------- next part --------------
--
Adrian Aichner
mailto:adrian at xemacs.org
http://www.xemacs.org/
More information about the XEmacs-Beta
mailing list