Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Solaris wxGTK 2.6.3 or wxGTK 2.8.4: Application hangs on exit.

7 views
Skip to first unread message

Lothar Behrens

unread,
Jun 15, 2007, 5:33:56 PM6/15/07
to
Hi,

some weeks ago I have figured out, that my application will hang on
application exit. I know about undestroyed
windows and I had these problems too, but I thougt that problem was
solved, as of my other platforms.
(Windows wxMSW / Linux wxGTK / Mac OS X wxMac)

I also tried to exit my application without opening any child windows.

Also I figured out that the application will hang in a cleanup routine
in event.cpp

I tried to determine the loop in the linked table elements, but it is
not at the first
element.

Any ideas ?

Thanks, Lothar

Code is from wxGTK 2.6.3 release:

// Clear all tables
void wxEventHashTable::ClearAll()
{
wxEventHashTable* table = sm_first;

while (table)
{
table->Clear();
table = table->m_next;

if (table == sm_first) { // Detect a loop doesn't help
wxASSERT_MSG( true,
wxT("Fatal: Event hash table loop detected.") );
return;
}
}
}


Are there some specific pittfalls on Solaris ?

Lothar Behrens

unread,
Jun 16, 2007, 5:32:57 AM6/16/07
to
On Jun 15, 11:33 pm, Lothar Behrens <lothar.behr...@lollisoft.de>
wrote:

> // Clear all tables
> void wxEventHashTable::ClearAll()
> {
> wxEventHashTable* table = sm_first;
>
> while (table)
> {
> table->Clear();
> table = table->m_next;
>
> if (table == sm_first) { // Detect a loop doesn't help
> wxASSERT_MSG( true,
> wxT("Fatal: Event hash table loop detected.") );
> return;
> }

Hi,

I have at least a working detection code for now. I don't compare
against sm_first, but I check the validness of - I think -
general condition of doubly linked lists:

if (table->m_next != NULL)
if (table->m_next->m_previous != table)
// Error doubly linked list is corrupted
return;

This way I get rid of the problem that my application doesn't exit and
loops here. But I still do not know where this comes from.
It was actually a loop because I have confirmed that with the contents
of some m_next pointer values.

Regards, Lothar

0 new messages