KMaiL: Can't setup D-Bus service. Probably already running.

Ralf Habacker ralf.habacker at freenet.de
Tue Feb 19 22:16:54 GMT 2008


Thiago Macieira schrieb:
> On Tuesday 19 February 2008 15:56:34 Ralf Habacker wrote:
>   
>> ... but this does not help to find a solution for the reported issue,
>> which requires to work together to find a way out or this problem will
>> still remain.
>>
>> 1. Which condition enables dbus to detect that a connection is close and
>> where in  the dbus code is this located ? This is required to generate
>> testcases and/or find the right place for additional debug messages in
>> dbus code.
>>     
>
> It detects that the connection closed in its select() main loop. When one 
> client goes away, the (Unix) socket closes automatically and immediately. The 
> dbus-daemon then gets a read notification. When it tries to read, it gets 0 
> bytes, indicating EOF. Then it proceeds to release all resources associated 
> with that client.
>
> That's on Unix. I have no idea how you guys implemented the mainloop on 
> Windows. I know the Qt event loop uses a WSAAsyncSelect, but that's not 
> necessary for dbus-daemon (since it has no GUI). It can use a normal, 
> Unix-style select() with timeout.
>   
it does uses select() too, there is a  platform indendepent wrapper 
called _dbus_poll()
> <snip>
> What happens to non-KDE Qt applications? How about other D-Bus applications 
> running with libdbus-1? Or without it (like the Java or NDesk/C# bindings)?
>   
I have append a qt based testcase using qdbus to analys the 
registerService()/unregisterService() functions

first test scenario
cmd> start registertest 30  => run registerService and wait 30 sec
cmd> registertest 3 => run registerService and wait 3 sec
-> second process cannot register name, which is the expected behavior

second test scenario
cmd> registertest 3  nounregister && registertest 3  nounregister => run 
registerService without unregisterService() for 3 sec, then run another 
registerService without unregisterService() for 3 sec
this simulates the situation, that unregisterService() wasn't called on 
application exit.
-> the second process can register the name without any problems, which 
means windbus using QDBus works as expected.

How to proceed now ?

Ralf

-------------- next part --------------
A non-text attachment was scrubbed...
Name: windbus-qt-test.zip
Type: application/x-zip-compressed
Size: 14821 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20080219/7c082e4a/attachment.bin>


More information about the kde-core-devel mailing list