QCopChannel hängt

Alles rund um die Programmierung mit Qt
Antworten
Ghal_Maraz
Beiträge: 12
Registriert: 19. Mai 2010 11:12

QCopChannel hängt

Beitrag von Ghal_Maraz »

Hallo,

ich versuche zur Zeit über den QCopChannel zwei Anwendungen zu verbinden. Dabei registrier ich in jeder Anwendung je einen Channel. Die erste Anwendung schickt nun Anfragen an die Zweite. Die Zweite antwortet (nur).
Generell funktioniert das ganz gut, aber sobald ich zu viele Anfragen auf einmal absetzen will bleiben die Anwendungen hängen. Ich nehme an das hat etwas damit zu tun, dass beide Anwendungen gleichzeitig versuchen Nachrichten abzusetzen.
Beende ich eine der Anwendungen nach dem Crash über die Shell mit Strg+C erscheint die Meldung "QWSLock::lock: Invalid argument". Hat jemand eine Ahnung was da schief geht? Sieht ja ziemlich nach einem Deadlock aus.

Ich bin für jede Hilfe dankbar.

MfG Ghal Maraz
GIB Projekt WS 2010 - Bocholt
Was ist eigentlich ein Kauznagel?
http://kauznagel.lima-city.de
Ghal_Maraz
Beiträge: 12
Registriert: 19. Mai 2010 11:12

Re: QCopChannel hängt

Beitrag von Ghal_Maraz »

Nachdem ich mein Programm ein wenig umgestellt und im Virtual Framebuffer debuggt habe, habe ich die Stelle gefunden, an der das Programm hängen bleibt. Beim Aufruf von QCopChannel::isRegistered() wird eine Anfrage an den QCopChannel QLatin1String("") gesendet und anschließend die Function waitForQCopResponse() aufgerufen. Dort hängt er in einer for(;;)-Schleife und pollt nach einer Anwort, die nie ankommt.

EDIT:
Nachdem ich ein wenig weiter geforscht habe, habe ich die Ursache gefunden. Ich benutze eine systemweite Semaphore in den beiden Anwendungen. Während des Zugriffs auf den CopChannel belegt die anfragende Anwendung diese Semaphore. Nun kann es passieren, dass die andere Anwendung an einer Stelle ist, an der sie ebenfalls die Semaphore braucht. Diese Anwendung ist dummerweise im Besitz des QWSServers, der nun während die Anwendung in der Semaphore hängt auch nicht auf die CopChannel-Anfragen der ersteren Anwendung anworten kann.

Schließen und am besten gleich löschen ;-)
GIB Projekt WS 2010 - Bocholt
Was ist eigentlich ein Kauznagel?
http://kauznagel.lima-city.de
Antworten