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 ?
> // 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