void PopupProxy::deleteMoreMenus() { const KMenu* myParent = parent(); if ( myParent != m_proxy_for_menu ) { KMenu* delme = m_proxy_for_menu; m_proxy_for_menu = static_cast<KMenu*>( m_proxy_for_menu->parent() ); while ( m_proxy_for_menu != myParent ) { delme = m_proxy_for_menu; m_proxy_for_menu = static_cast<KMenu*>( m_proxy_for_menu->parent() ); } // We are called probably from within the menus event-handler (triggered=>slotMoveToTop=>changed=>slotHistoryChanged=>deleteMoreMenus) // what can result in a crash if we just delete the menu here (#155196 and #165154) So, delay the delete. delme->deleteLater(); } }