Re: Repeatable crash sequence...


Subject: Re: Repeatable crash sequence...
From: Shaw Terwilliger (sterwill@abisource.com)
Date: Wed Sep 13 2000 - 16:10:51 CDT


Bruce Pearson wrote:
> I should be able to fix this problem in a straight forward manner.

[This comment isn't necessarily directed at Bruce, but I think it's
related to the spell check timers]

Today I was using the builds we did for 0.7.11 (which should be out soon) and
found a pretty nasty little bug. If I open a document and change zoom
levels before the spell checking is done on the displayed page, I get
a timer-related segfault. It looks like AbiWord is destroying or changing
some important part of the document view as it does the zoom change, and
a timer fires with pointers to the old pieces.

The backtrace doesn't tell me much, but maybe someone who's been looking
at the timer code will recognize something:

(gdb) bt
#0 0x28387a5f in ?? ()
#1 0x8101374 in _Timer_Proc (p=0x837ace0) at ut_unixTimer.cpp:61
#2 0x401c01fa in g_main_set_poll_func () from /usr/lib/libglib-1.2.so.0
#3 0x401bf2d9 in g_get_current_time () from /usr/lib/libglib-1.2.so.0
#4 0x401bf8e3 in g_get_current_time () from /usr/lib/libglib-1.2.so.0
#5 0x401bfa7c in g_main_run () from /usr/lib/libglib-1.2.so.0
#6 0x400e11e7 in gtk_main () from /usr/lib/libgtk-1.2.so.0
#7 0x80af5ec in AP_UnixApp::main (szAppName=0x8206908 "AbiWord Personal",
    argc=1, argv=0xbffffb84) at ap_UnixApp.cpp:895
#8 0x809cbfb in main (argc=1, argv=0xbffffb84) at UnixMain.cpp:24
#9 0x40301a42 in __libc_start_main () from /lib/libc.so.6
(gdb)

Frame #1 is dying within the pTimer->fire() call. Here's frame #1's
implementation for quick reference (it's been a long time since I deconstructed
a UT_Timer):

static int _Timer_Proc(void *p)
{
        UT_UNIXTimer* pTimer = (UT_UNIXTimer*) p;
        UT_ASSERT(pTimer);

// UT_DEBUGMSG(("ut_unixTimer.cpp: timer fire\n"));
        
        pTimer->fire();

        /*
          We need to manually reset the timer here. This cross-platform
          timer was designed to emulate the semantics of Win32 timers,
          which continually fire until they are killed.
        */

        pTimer->resetIfStarted();
        return 0;
}

-- 
Shaw Terwilliger <sterwill@abisource.com>



This archive was generated by hypermail 2b25 : Wed Sep 13 2000 - 16:10:53 CDT