On Thu, Mar 20, 2008 at 07:44:52PM +0000, place wrote:
I think I mentioned this problem some time ago, but playing with ComplexButton makes it much worse (when meta charset causes a repush).
The backtrace shows that it's unhappy because IdleFunc doesn't have an equals().
To make the problem go away, I changed the remove in FltkPlatform::removeIdle() to a removeRef, but, again, I don't know this code well enough to know what should be going on.
#0 0x40344c81 in kill () from /lib/libc.so.6 #1 0x401b04a1 in pthread_kill () from /lib/libpthread.so.0 #2 0x401b087b in raise () from /lib/libpthread.so.0 #3 0x403448f8 in raise () from /lib/libc.so.6 #4 0x40345f00 in abort () from /lib/libc.so.6 #5 0x0809e054 in misc::assertNotReached () at misc.hh:67 #6 0x080ad6f1 in object::Object::equals (this=0x81ab118, other=0x81ab118) at object.cc:49 #7 0x080aa182 in container::untyped::List::remove0 (this=0x81c1b90, element=0x81ab118, compare=true, doNotDeleteAtAll=false) at container.cc:254 #8 0x080891c7 in container::untyped::List::remove (this=0x81c1b90, element=0x81ab118) at ../lout/container.hh:169 #9 0x080891eb in container::typed::List<dw::fltk::FltkPlatform::IdleFunc>::remo ve (this=0x81c1960, element=0x81ab118) at ../lout/container.hh:376 #10 0x08086968 in dw::fltk::FltkPlatform::removeIdle (this=0x81c1b68, idleId=1) at fltkplatform.cc:319 #11 0x0809feaa in ~Layout (this=0x81c1bf8) at layout.cc:117
As far as I can see it should be removeRef () here, as you suggest. While looking at it, I found a buglet in layout.cc. Cheers, Johannes diff -r f1f343e2c024 dw/fltkplatform.cc --- a/dw/fltkplatform.cc Tue Mar 18 18:05:51 2008 +0100 +++ b/dw/fltkplatform.cc Tue Mar 25 19:09:26 2008 +0100 @@ -316,7 +316,7 @@ void FltkPlatform::removeIdle (int idleI for(found = false, it = idleQueue->iterator(); !found && it.hasNext(); ) { idleFunc = it.getNext(); if(idleFunc->id == idleId) { - idleQueue->remove (idleFunc); + idleQueue->removeRef (idleFunc); found = true; } } diff -r f1f343e2c024 dw/layout.cc --- a/dw/layout.cc Tue Mar 18 18:05:51 2008 +0100 +++ b/dw/layout.cc Tue Mar 25 19:09:26 2008 +0100 @@ -473,7 +473,7 @@ void Layout::updateAnchor () if (anchor == NULL) { /** \todo Copy comment from old docs. */ - if (scrollIdleId && !scrollIdleNotInterrupted) { + if (scrollIdleId != -1 && !scrollIdleNotInterrupted) { platform->removeIdle (scrollIdleId); scrollIdleId = -1; }