]> code.delx.au - pulseaudio/blobdiff - src/modules/reserve.c
alsa: Remove unused variable
[pulseaudio] / src / modules / reserve.c
index 79ec97ac813183e4a45492e879cd349aab93d1cd..b4c168cf78983d173b3ef35071d7ebafa2122e12 100644 (file)
@@ -1,3 +1,5 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: t -*-*/
+
 /***
   Copyright 2009 Lennart Poettering
 
@@ -43,22 +45,23 @@ struct rd_device {
 
        DBusConnection *connection;
 
-       int owning:1;
-       int registered:1;
-       int filtering:1;
-       int gave_up:1;
+       unsigned owning:1;
+       unsigned registered:1;
+       unsigned filtering:1;
+       unsigned gave_up:1;
 
        rd_request_cb_t request_cb;
        void *userdata;
 };
 
-
 #define SERVICE_PREFIX "org.freedesktop.ReserveDevice1."
 #define OBJECT_PREFIX "/org/freedesktop/ReserveDevice1/"
 
 static const char introspection[] =
        DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE
        "<node>"
+       " <!-- If you are looking for documentation make sure to check out\n"
+       "      http://git.0pointer.de/?p=reserve.git;a=blob;f=reserve.txt -->\n"
        " <interface name=\"org.freedesktop.ReserveDevice1\">"
        "  <method name=\"RequestRelease\">"
        "   <arg name=\"priority\" type=\"i\" direction=\"in\"/>"
@@ -288,13 +291,13 @@ static DBusHandlerResult filter_handler(
        DBusMessage *m,
        void *userdata) {
 
-       DBusMessage *reply;
        rd_device *d;
        DBusError error;
 
        dbus_error_init(&error);
 
        d = userdata;
+       assert(d->ref >= 1);
 
        if (dbus_message_is_signal(m, "org.freedesktop.DBus", "NameLost")) {
                const char *name;
@@ -319,35 +322,13 @@ static DBusHandlerResult filter_handler(
                                rd_release(d);
                        }
 
-                       return DBUS_HANDLER_RESULT_HANDLED;
                }
        }
 
-       return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
 invalid:
-       if (!(reply = dbus_message_new_error(
-                     m,
-                     DBUS_ERROR_INVALID_ARGS,
-                     "Invalid arguments")))
-               goto oom;
-
-       if (!dbus_connection_send(c, reply, NULL))
-               goto oom;
-
-       dbus_message_unref(reply);
-
        dbus_error_free(&error);
 
-       return DBUS_HANDLER_RESULT_HANDLED;
-
-oom:
-       if (reply)
-               dbus_message_unref(reply);
-
-       dbus_error_free(&error);
-
-       return DBUS_HANDLER_RESULT_NEED_MEMORY;
+       return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 }
 
 
@@ -461,8 +442,17 @@ int rd_acquire(
        if (!(reply = dbus_connection_send_with_reply_and_block(
                      d->connection,
                      m,
-                     -1,
+                     5000, /* 5s */
                      error))) {
+
+               if (dbus_error_has_name(error, DBUS_ERROR_TIMED_OUT) ||
+                   dbus_error_has_name(error, DBUS_ERROR_UNKNOWN_METHOD) ||
+                   dbus_error_has_name(error, DBUS_ERROR_NO_REPLY)) {
+                       /* This must be treated as denied. */
+                       r = -EBUSY;
+                       goto fail;
+               }
+
                r = -EIO;
                goto fail;
        }
@@ -549,7 +539,7 @@ void rd_release(
 
        assert(d->ref > 0);
 
-       if (--d->ref)
+       if (--d->ref > 0)
                return;
 
 
@@ -564,17 +554,11 @@ void rd_release(
                        d->connection,
                        d->object_path);
 
-       if (d->owning) {
-               DBusError error;
-               dbus_error_init(&error);
-
+       if (d->owning)
                dbus_bus_release_name(
                        d->connection,
                        d->service_name,
-                       &error);
-
-               dbus_error_free(&error);
-       }
+                       NULL);
 
        free(d->device_name);
        free(d->application_name);