Sync calls are now performed without lock held 71/83571/1
authorAdrian Szyndela <adrian.s@samsung.com>
Thu, 11 Aug 2016 15:38:34 +0000 (17:38 +0200)
committerAdrian Szyndela <adrian.s@samsung.com>
Thu, 11 Aug 2016 15:56:09 +0000 (17:56 +0200)
commit723e056ea5b02be1ba9d6789957abf7cb86fbbde
treeec83f6025bebd31b525bda13cb8d1e0c8416530e
parent8691d0e446b1db30e689bdc726ed90d70294f61a
Sync calls are now performed without lock held

Sync calls were performed by function _g_kdbus_worker_send_message_sync()
called under connection lock. It was not necessary to hold the lock,
and it had side effects: holding another threads that wanted to call
something synchronically.

First argument of the function is connection->kdbus_worker. It is safe
to access this member, because it is read-only and outer context must keep
a reference to the connection, anyway. Worker itself is in turn kept
by reference from the connection.

The function uses only worker's read-only members, which are initialized
once at the creation of worker or connection. The only exception is
'matches' field, which is also modified in 'AddMatch'/'RemoveMatch'
method calls handler.

To sum up: I moved call to _g_kdbus_worker_send_message_sync() out of
connection lock and I have added a dedicated mutex for 'matches'.

Change-Id: I5895e591a9f32f085958b5b422d8b81110bd6c4d
gio/gdbusconnection.c
gio/gkdbus.c