Changes ======= v3.1.10.1 - Fix deadlock in connection: If data is currently dispatched and disconnecting tooks place it waits until disconnecting is finished. The problem is that the 'connectionGuard_' mutex is locked which is tried to be locked in 'sendDBusMessageWithReplyAsync' as well. This leads to deadlock and is fixed by removing the 'dispatchMutex' and instead of this the 'connectionGuard_' mutex is now used. - Fix availability listeners: Use an incrementing index as an identifier for subscriptions instead of iterators to a list that will get modified. Store the receiver proxy with each listener, instead of assuming that all proxies that connect to an interface are the same. - Avoid seg fault when creating a connection failed. v3.1.10 - If an 'DBusInstanceAvailabilityStatusChangedEvent' occurs and the manager proxy was deleted, a bad_weak_ptr occurs. This is now avoided by introducing a weak_ptr. If the weak_ptr can be locked, the manager proxy was not deleted yet. - Moved mutex lock in 'DBusMainLoop::registerWatch' to avoid deadlock. - The 'DBusSignalHandlers' were stored as raw pointers and this can cause crashes when the proxy was deleted. This is now replaced by storing a weak_ptr of the 'DBusSignalHandler'. - DBusFreeDesktopAttribute is now adjusted to use the new interface of freeDesktopGetCurrentValueForSignalListener in LegacyEvent. - Fixed availability problem with services <= CommonAPI 3.1.8 due to the extension of the CommonAPI address. - Check path correctness in managed callback (DBusServiceRegistry.cpp). - Remove clang compiler warnings. - Keep service registry map alive: During program cleanup, the global service registry map was deleted before the global variables to proxies were cleaned up. This caused problems when the proxy tried to access the map that was no longer there. Solution: keep a reference to the map in the service registry entry. This way the map is deleted only after the last service registry (and the last proxy) has been deleted. - Fixed THMainloopIndependence and THMainloopIntegration segfault. The problem is that a 'DBusQueueDispatchSource' has a pointer to its related 'DBusQueueWatch' as member variable and in the destructor of the dispatch source the watch is accessed. So a segfault can occur when the watch is deleted before the dispatch source. - Replaced polling mechanism in 'DBusMainLoop' from sockets to WSAEvents in combination with named pipes. - Added support for the DBus message type 'Error'. This needed the introduction of a new class ('DBusErrorEvent'), adaptions on proxy side ('DBusProxyHelper') and on stub side ('DBusStubAdapterHelper') and a libdbus patch that avoids the deletion of a message reply when an error occured / when an error reply was sent. This is necessary to deserialize the arguments of the error reply.