]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- work on dbus interface
authorArvin Schnell <aschnell@suse.de>
Mon, 30 Jul 2012 08:13:22 +0000 (10:13 +0200)
committerArvin Schnell <aschnell@suse.de>
Mon, 30 Jul 2012 08:13:22 +0000 (10:13 +0200)
dbus/DBusConnection.cc
dbus/DBusMessage.cc
dbus/DBusMessage.h
dbus/DBusServer.cc
server/Client.cc
server/snapperd.cc

index 572cd483b1d9e74e22269999d29d52dd34591dc2..a6373541a3d2f882221b91f9bdffcf3a06df9409 100644 (file)
@@ -98,8 +98,7 @@ namespace DBus
            throw ErrorException(err);
        }
 
-       Message reply(tmp);
-       return reply;
+       return Message(tmp, false);
     }
 
 
index efb75837302e1a35bf5f216a03a118ac24610211..3f6265cb701428543b87d9fc5e3aa4f6bcd48b00 100644 (file)
 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);
     }
 
 
index c4f82fa92319c9f404ef5024b10e59e3c5574fb2..e9e8e6b4412fc8f86d249c15ac6290aa94bc247f 100644 (file)
@@ -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)
        {
        }
 
index 840af5f5f6ec31e9a01fa6789d4b1227bcfbc16e..50d948af244b3e97e97150151c67efc07c030fa3 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 
+#include <unistd.h>
 #include <poll.h>
 #include <time.h>
 
@@ -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);
                        }
                    }
                }
index fb2ced9228f3b6ea446b1416c149fa41a86f664f..6757a1143d1ab2a85a9488dc5ab2088e77266d73 100644 (file)
@@ -42,6 +42,11 @@ Client::~Client()
     thread.interrupt();
 
     thread.join();             // TODO this can block
+
+    for (list<Comparison*>::iterator it = comparisons.begin(); it != comparisons.end(); ++it)
+    {
+       delete *it;
+    }
 }
 
 
index 9abd7f4d46639ebae69d36d44ffab130b88bd669..bf6d022ed2f343871695d59c6df28be28ae59667 100644 (file)
@@ -1178,7 +1178,7 @@ message_func1(DBusConnection* connection, DBusMessage* message, void* data)
 {
     DBus::Server* s = static_cast<DBus::Server*>(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<DBus::Server*>(data);
 
-    DBus::Message msg(message);
+    DBus::Message msg(message, true);
 
     if (msg.get_type() == DBUS_MESSAGE_TYPE_SIGNAL)
     {