From 9047650faad7e64e0a36553dfe04dc7ad084f095 Mon Sep 17 00:00:00 2001 From: zecke Date: Wed, 16 Oct 2002 18:24:48 +0000 Subject: More IPC integtration OCOPClient::self() added so we keep the connections low --- (limited to 'x11/ipc/server') diff --git a/x11/ipc/server/ocopserver.cpp b/x11/ipc/server/ocopserver.cpp index 421e49c..4940cb8 100644 --- a/x11/ipc/server/ocopserver.cpp +++ b/x11/ipc/server/ocopserver.cpp @@ -214,7 +214,7 @@ void OCopServer::registerClient( int fd ) { void OCopServer::deregisterClient(int fd ) { QMap::Iterator it = m_clients.find( fd ); if (it != m_clients.end() ) { - OCOPClient client = (*it); + OCOPClient client = it.data(); delete client.notify; m_clients.remove(fd ); close(fd ); @@ -227,23 +227,36 @@ void OCopServer::deregisterClient(int fd ) { * if count becomes 0 remove the channel * otherwise replace QArray */ - QMap >::Iterator it; - for ( it = m_channels.begin(); it != m_channels.end(); ++it ) { + QMap >::Iterator it2; + repeatIt: + for ( it2 = m_channels.begin(); it2 != m_channels.end(); ++it2 ) { /* * The channel contains this fd */ - if ( it.data().contains( fd ) ) { - QValueList array = it.data(); + qWarning("Channel %s", it2.key().data() ); + if ( it2.data().contains( fd ) ) { + qWarning("contains"); + QValueList array = it2.data(); /* * remove channel or just replace */ if ( array.count() == 1 ) { + qWarning("Invalidate!"); /* is the list now invalidatet? */ - m_channels.remove( it ); + m_channels.remove( it2 ); + /* That is the first go to of my life + * but Iterator remove( Iterator ) + * does not exist + * it2 = --it2; + * does not work reliable too + * so the only way is to reiterate :( + */ + goto repeatIt; }else{ + qWarning("removing"); array.remove( fd ); - it = m_channels.replace( it.key(), array ); + it2 = m_channels.replace( it2.key(), array ); } } } // off all channels -- cgit v0.9.0.2