diff options
| author | Lennart Poettering <lennart@poettering.net> | 2009-01-29 16:26:34 +0100 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2009-01-29 16:26:34 +0100 | 
| commit | 47a9b96b64e9fd949adf4dd1fbd26c5d75a5df30 (patch) | |
| tree | b367b49be2c4d09cadbcba209040e11a3a3fbb8c /src | |
| parent | 746dc2ac19950d4eecc083929d6ed86443e3a112 (diff) | |
add some helpers for dealing with DBusPendingCall based on Mrc-Andre's work in module-bluetooth-discover
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/dbus-util.c | 48 | ||||
| -rw-r--r-- | src/modules/dbus-util.h | 24 | 
2 files changed, 72 insertions, 0 deletions
diff --git a/src/modules/dbus-util.c b/src/modules/dbus-util.c index 1fc1e86f..f6a986a5 100644 --- a/src/modules/dbus-util.c +++ b/src/modules/dbus-util.c @@ -382,3 +382,51 @@ void pa_dbus_remove_matches(DBusConnection *c, ...) {      }      va_end(ap);  } + +pa_dbus_pending *pa_dbus_pending_new(DBusMessage *m, DBusPendingCall *pending, void *context_data, void *call_data) { +    pa_dbus_pending *p; + +    pa_assert(pending); + +    p = pa_xnew(pa_dbus_pending, 1); +    p->message = m; +    p->pending = pending; +    p->context_data = context_data; +    p->call_data = call_data; + +    PA_LLIST_INIT(pa_dbus_pending, p); + +    return p; +} + +void pa_dbus_pending_free(pa_dbus_pending *p) { +    pa_assert(p); + +    if (p->pending) { +        dbus_pending_call_cancel(p->pending); +        dbus_pending_call_unref(p->pending); +    } + +    if (p->message) +        dbus_message_unref(p->message); + +    pa_xfree(p); +} + +void pa_dbus_sync_pending_list(pa_dbus_pending **p) { +    pa_assert(p); + +    while (*p) +        dbus_pending_call_block((*p)->pending); +} + +void pa_dbus_free_pending_list(pa_dbus_pending **p) { +    pa_dbus_pending *i; + +    pa_assert(p); + +    while ((i = *p)) { +        PA_LLIST_REMOVE(pa_dbus_pending, *p, i); +        pa_dbus_pending_free(i); +    } +} diff --git a/src/modules/dbus-util.h b/src/modules/dbus-util.h index 0ab87809..fd974673 100644 --- a/src/modules/dbus-util.h +++ b/src/modules/dbus-util.h @@ -25,6 +25,7 @@  #include <dbus/dbus.h>  #include <pulsecore/core.h> +#include <pulsecore/llist.h>  typedef struct pa_dbus_connection pa_dbus_connection; @@ -40,4 +41,27 @@ void pa_dbus_connection_unref(pa_dbus_connection *conn);  int pa_dbus_add_matches(DBusConnection *c, DBusError *error, ...) PA_GCC_SENTINEL;  void pa_dbus_remove_matches(DBusConnection *c,  ...) PA_GCC_SENTINEL; +typedef struct pa_dbus_pending pa_dbus_pending; + +struct userdata; /* We leave the actual definition to the caller */ + +struct pa_dbus_pending { +    DBusMessage *message; +    DBusPendingCall *pending; + +    void *context_data; +    void *call_data; + +    PA_LLIST_FIELDS(pa_dbus_pending); +}; + +pa_dbus_pending *pa_dbus_pending_new(DBusMessage *m, DBusPendingCall *pending, void *context_data, void *call_data); +void pa_dbus_pending_free(pa_dbus_pending *p); + +/* Sync up a list of pa_dbus_pending_call objects */ +void pa_dbus_sync_pending_list(pa_dbus_pending **p); + +/* Free up a list of pa_dbus_pending_call objects */ +void pa_dbus_free_pending_list(pa_dbus_pending **p); +  #endif  | 
