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