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 <[EMAIL PROTECTED]>



Reply via email to