From: Arvin Schnell Date: Mon, 30 Jul 2012 08:13:22 +0000 (+0200) Subject: - work on dbus interface X-Git-Tag: v0.1.3~188 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=153fdadd0b2eb2db277bf5ff9d2ba0d13efc5c9d;p=thirdparty%2Fsnapper.git - work on dbus interface --- diff --git a/dbus/DBusConnection.cc b/dbus/DBusConnection.cc index 572cd483..a6373541 100644 --- a/dbus/DBusConnection.cc +++ b/dbus/DBusConnection.cc @@ -98,8 +98,7 @@ namespace DBus throw ErrorException(err); } - Message reply(tmp); - return reply; + return Message(tmp, false); } diff --git a/dbus/DBusMessage.cc b/dbus/DBusMessage.cc index efb75837..3f6265cb 100644 --- a/dbus/DBusMessage.cc +++ b/dbus/DBusMessage.cc @@ -29,11 +29,12 @@ namespace DBus { - Message::Message(DBusMessage* m) + Message::Message(DBusMessage* m, bool ref) : msg(m) { assert(msg); - dbus_message_ref(msg); + if (ref) + dbus_message_ref(msg); } diff --git a/dbus/DBusMessage.h b/dbus/DBusMessage.h index c4f82fa9..e9e8e6b4 100644 --- a/dbus/DBusMessage.h +++ b/dbus/DBusMessage.h @@ -76,7 +76,7 @@ namespace DBus { public: - Message(DBusMessage* m); + Message(DBusMessage* m, bool ref); Message(const Message& m); ~Message(); @@ -114,7 +114,7 @@ namespace DBus MessageMethodCall(const char* service, const char* object, const char* interface, const char* method) - : Message(dbus_message_new_method_call(service, object, interface, method)) + : Message(dbus_message_new_method_call(service, object, interface, method), false) { } @@ -126,7 +126,7 @@ namespace DBus public: MessageMethodReturn(Message& m) - : Message(dbus_message_new_method_return(m.get_message())) + : Message(dbus_message_new_method_return(m.get_message()), false) { if (m.get_type() != DBUS_MESSAGE_TYPE_METHOD_CALL) throw FatalException(); @@ -140,7 +140,7 @@ namespace DBus public: MessageError(Message& m, const char* error_msg, const char* error_code) - : Message(dbus_message_new_error(m.get_message(), error_msg, error_code)) + : Message(dbus_message_new_error(m.get_message(), error_msg, error_code), false) { if (m.get_type() != DBUS_MESSAGE_TYPE_METHOD_CALL) throw FatalException(); @@ -154,7 +154,7 @@ namespace DBus public: MessageSignal(const char* path, const char* interface, const char* name) - : Message(dbus_message_new_signal(path, interface, name)) + : Message(dbus_message_new_signal(path, interface, name), false) { } diff --git a/dbus/DBusServer.cc b/dbus/DBusServer.cc index 840af5f5..50d948af 100644 --- a/dbus/DBusServer.cc +++ b/dbus/DBusServer.cc @@ -20,6 +20,7 @@ */ +#include #include #include @@ -118,11 +119,16 @@ namespace DBus { if (it2->fd == it->fd) { - if ((it2->revents & POLLIN) && (it->flags & DBUS_WATCH_READABLE)) - dbus_watch_handle(it->dbus_watch, DBUS_WATCH_READABLE); + unsigned int flags = 0; - if ((it2->revents & POLLOUT) && (it->flags & DBUS_WATCH_WRITABLE)) - dbus_watch_handle(it->dbus_watch, DBUS_WATCH_WRITABLE); + if (it2->revents & POLLIN) + flags |= DBUS_WATCH_READABLE; + + if (it2->revents & POLLOUT) + flags |= DBUS_WATCH_WRITABLE; + + if (flags != 0) + dbus_watch_handle(it->dbus_watch, flags); } } } diff --git a/server/Client.cc b/server/Client.cc index fb2ced92..6757a114 100644 --- a/server/Client.cc +++ b/server/Client.cc @@ -42,6 +42,11 @@ Client::~Client() thread.interrupt(); thread.join(); // TODO this can block + + for (list::iterator it = comparisons.begin(); it != comparisons.end(); ++it) + { + delete *it; + } } diff --git a/server/snapperd.cc b/server/snapperd.cc index 9abd7f4d..bf6d022e 100644 --- a/server/snapperd.cc +++ b/server/snapperd.cc @@ -1178,7 +1178,7 @@ message_func1(DBusConnection* connection, DBusMessage* message, void* data) { DBus::Server* s = static_cast(data); - DBus::Message msg(message); + DBus::Message msg(message, true); if (msg.get_type() == DBUS_MESSAGE_TYPE_METHOD_CALL) { @@ -1217,7 +1217,7 @@ message_func2(DBusConnection* connection, DBusMessage* message, void* data) { DBus::Server* s = static_cast(data); - DBus::Message msg(message); + DBus::Message msg(message, true); if (msg.get_type() == DBUS_MESSAGE_TYPE_SIGNAL) {