summaryrefslogtreecommitdiff
path: root/x11/ipc
Unidiff
Diffstat (limited to 'x11/ipc') (more/less context) (ignore whitespace changes)
-rw-r--r--x11/ipc/client/ocopclient.cpp9
-rw-r--r--x11/ipc/client/ocopclient.h7
-rw-r--r--x11/ipc/server/ocopserver.cpp27
3 files changed, 35 insertions, 8 deletions
diff --git a/x11/ipc/client/ocopclient.cpp b/x11/ipc/client/ocopclient.cpp
index c1def73..6085481 100644
--- a/x11/ipc/client/ocopclient.cpp
+++ b/x11/ipc/client/ocopclient.cpp
@@ -15,4 +15,13 @@
15#include "ocopclient.h" 15#include "ocopclient.h"
16 16
17OCOPClient* OCOPClient::m_self = 0;
18
19OCOPClient* OCOPClient::self() {
20 if (!m_self ) {
21 m_self = new OCOPClient();
22 }
23 return m_self;
24}
25
17OCOPClient::OCOPClient( const QString& path, QObject* obj ) 26OCOPClient::OCOPClient( const QString& path, QObject* obj )
18 : QObject( obj ) 27 : QObject( obj )
diff --git a/x11/ipc/client/ocopclient.h b/x11/ipc/client/ocopclient.h
index 53018a5..ee2015a 100644
--- a/x11/ipc/client/ocopclient.h
+++ b/x11/ipc/client/ocopclient.h
@@ -21,5 +21,9 @@ class OCOPClient : public QObject{
21 Q_OBJECT 21 Q_OBJECT
22public: 22public:
23 23 /*
24 * this is the static
25 * OCopClient
26 */
27 static OCOPClient* self();
24 /** 28 /**
25 * Occasionally I decide to start a Server from here 29 * Occasionally I decide to start a Server from here
@@ -57,4 +61,5 @@ private:
57 int m_tries; 61 int m_tries;
58 62
63 static OCOPClient* m_self;
59}; 64};
60 65
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
@@ -215,5 +215,5 @@ void OCopServer::deregisterClient(int fd ) {
215 QMap<int, OCOPClient>::Iterator it = m_clients.find( fd ); 215 QMap<int, OCOPClient>::Iterator it = m_clients.find( fd );
216 if (it != m_clients.end() ) { 216 if (it != m_clients.end() ) {
217 OCOPClient client = (*it); 217 OCOPClient client = it.data();
218 delete client.notify; 218 delete client.notify;
219 m_clients.remove(fd ); 219 m_clients.remove(fd );
@@ -228,11 +228,14 @@ void OCopServer::deregisterClient(int fd ) {
228 * otherwise replace QArray<int> 228 * otherwise replace QArray<int>
229 */ 229 */
230 QMap<QCString, QValueList<int> >::Iterator it; 230 QMap<QCString, QValueList<int> >::Iterator it2;
231 for ( it = m_channels.begin(); it != m_channels.end(); ++it ) { 231 repeatIt:
232 for ( it2 = m_channels.begin(); it2 != m_channels.end(); ++it2 ) {
232 /* 233 /*
233 * The channel contains this fd 234 * The channel contains this fd
234 */ 235 */
235 if ( it.data().contains( fd ) ) { 236 qWarning("Channel %s", it2.key().data() );
236 QValueList<int> array = it.data(); 237 if ( it2.data().contains( fd ) ) {
238 qWarning("contains");
239 QValueList<int> array = it2.data();
237 240
238 /* 241 /*
@@ -240,9 +243,19 @@ void OCopServer::deregisterClient(int fd ) {
240 */ 243 */
241 if ( array.count() == 1 ) { 244 if ( array.count() == 1 ) {
245 qWarning("Invalidate!");
242 /* is the list now invalidatet? */ 246 /* is the list now invalidatet? */
243 m_channels.remove( it ); 247 m_channels.remove( it2 );
248 /* That is the first go to of my life
249 * but Iterator remove( Iterator )
250 * does not exist
251 * it2 = --it2;
252 * does not work reliable too
253 * so the only way is to reiterate :(
254 */
255 goto repeatIt;
244 }else{ 256 }else{
257 qWarning("removing");
245 array.remove( fd ); 258 array.remove( fd );
246 it = m_channels.replace( it.key(), array ); 259 it2 = m_channels.replace( it2.key(), array );
247 } 260 }
248 } 261 }