diff options
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/alsa-util.c | 3 | ||||
-rw-r--r-- | src/modules/module-alsa-sink.c | 2 | ||||
-rw-r--r-- | src/modules/module-bt-proximity.c | 1 | ||||
-rw-r--r-- | src/modules/module-console-kit.c | 51 | ||||
-rw-r--r-- | src/modules/module-hal-detect.c | 61 | ||||
-rw-r--r-- | src/modules/module-tunnel.c | 2 | ||||
-rw-r--r-- | src/modules/module-x11-xsmp.c | 2 |
7 files changed, 89 insertions, 33 deletions
diff --git a/src/modules/alsa-util.c b/src/modules/alsa-util.c index 5d52cbc9..8abf834d 100644 --- a/src/modules/alsa-util.c +++ b/src/modules/alsa-util.c @@ -574,7 +574,8 @@ snd_pcm_t *pa_alsa_open_by_device_id( SND_PCM_NONBLOCK| SND_PCM_NO_AUTO_RESAMPLE| SND_PCM_NO_AUTO_CHANNELS| - SND_PCM_NO_AUTO_FORMAT)) < 0) { + SND_PCM_NO_AUTO_FORMAT | + SND_PCM_NO_SOFTVOL)) < 0) { pa_log_info("Couldn't open PCM device %s: %s", d, snd_strerror(err)); pa_xfree(d); continue; diff --git a/src/modules/module-alsa-sink.c b/src/modules/module-alsa-sink.c index 8e66f796..aad6801e 100644 --- a/src/modules/module-alsa-sink.c +++ b/src/modules/module-alsa-sink.c @@ -1148,7 +1148,7 @@ int pa__init(pa_module*m) { } if (pa_modargs_get_value_boolean(ma, "tsched", &use_tsched) < 0) { - pa_log("Failed to parse timer_scheduling argument."); + pa_log("Failed to parse tsched argument."); goto fail; } diff --git a/src/modules/module-bt-proximity.c b/src/modules/module-bt-proximity.c index 77b95868..f924c3cb 100644 --- a/src/modules/module-bt-proximity.c +++ b/src/modules/module-bt-proximity.c @@ -358,7 +358,6 @@ static int add_matches(struct userdata *u, pa_bool_t add) { } else dbus_bus_remove_match(pa_dbus_connection_get(u->dbus_connection), filter2, &e); - if (add) pa_assert_se(dbus_connection_add_filter(pa_dbus_connection_get(u->dbus_connection), filter_func, u, NULL)); else diff --git a/src/modules/module-console-kit.c b/src/modules/module-console-kit.c index 3adee99e..e1933c28 100644 --- a/src/modules/module-console-kit.c +++ b/src/modules/module-console-kit.c @@ -71,7 +71,7 @@ struct userdata { static void add_session(struct userdata *u, const char *id) { DBusError error; DBusMessage *m = NULL, *reply = NULL; - int32_t uid; + uint32_t uid; struct session *session; char *t; @@ -92,10 +92,14 @@ static void add_session(struct userdata *u, const char *id) { goto fail; } - /* FIXME: Why is this in int32? and not an uint32? */ - if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) { - pa_log("Failed to parse GetUnixUser() result: %s: %s", error.name, error.message); - goto fail; + /* CK 0.3 this changed from int32 to uint32 */ + if (!dbus_message_get_args(reply, &error, DBUS_TYPE_UINT32, &uid, DBUS_TYPE_INVALID)) { + dbus_error_free(&error); + + if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) { + pa_log("Failed to parse GetUnixUser() result: %s: %s", error.name, error.message); + goto fail; + } } /* We only care about our own sessions */ @@ -163,27 +167,39 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo if (dbus_message_is_signal(message, "org.freedesktop.ConsoleKit.Seat", "SessionAdded")) { - if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID) || dbus_error_is_set(&error)) { - pa_log_error("Failed to parse SessionAdded message: %s: %s", error.name, error.message); - goto finish; + /* CK API changed to match spec in 0.3 */ + if (!dbus_message_get_args(message, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { + dbus_error_free(&error); + + if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID)) { + pa_log_error("Failed to parse SessionAdded message: %s: %s", error.name, error.message); + goto finish; + } } add_session(u, path); + return DBUS_HANDLER_RESULT_HANDLED; } else if (dbus_message_is_signal(message, "org.freedesktop.ConsoleKit.Seat", "SessionRemoved")) { - if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID) || dbus_error_is_set(&error)) { - pa_log_error("Failed to parse SessionRemoved message: %s: %s", error.name, error.message); - goto finish; + /* CK API changed to match spec in 0.3 */ + if (!dbus_message_get_args(message, &error, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID)) { + dbus_error_free(&error); + + if (!dbus_message_get_args(message, &error, DBUS_TYPE_STRING, &path, DBUS_TYPE_INVALID)) { + pa_log_error("Failed to parse SessionRemoved message: %s: %s", error.name, error.message); + goto finish; + } } remove_session(u, path); + return DBUS_HANDLER_RESULT_HANDLED; } finish: dbus_error_free(&error); - return DBUS_HANDLER_RESULT_HANDLED; + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static int get_session_list(struct userdata *u) { @@ -327,8 +343,17 @@ void pa__done(pa_module *m) { pa_hashmap_free(u->sessions, NULL, NULL); } - if (u->connection) + if (u->connection) { + DBusError error; + dbus_error_init(&error); + + dbus_bus_remove_match(pa_dbus_connection_get(u->connection), "type='signal',sender='org.freedesktop.ConsoleKit', interface='org.freedesktop.ConsoleKit.Seat'", &error); + dbus_error_free(&error); + + dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); + pa_dbus_connection_unref(u->connection); + } pa_xfree(u); } diff --git a/src/modules/module-hal-detect.c b/src/modules/module-hal-detect.c index 19430a3d..b2f97a10 100644 --- a/src/modules/module-hal-detect.c +++ b/src/modules/module-hal-detect.c @@ -56,9 +56,11 @@ PA_MODULE_DESCRIPTION("Detect available audio hardware and load matching drivers PA_MODULE_VERSION(PACKAGE_VERSION); PA_MODULE_LOAD_ONCE(TRUE); #if defined(HAVE_ALSA) && defined(HAVE_OSS) -PA_MODULE_USAGE("api=<alsa or oss>"); +PA_MODULE_USAGE("api=<alsa or oss> " + "tsched=<enable system timer based scheduling mode?>"); #elif defined(HAVE_ALSA) -PA_MODULE_USAGE("api=<alsa>"); +PA_MODULE_USAGE("api=<alsa> " + "tsched=<enable system timer based scheduling mode?>"); #elif defined(HAVE_OSS) PA_MODULE_USAGE("api=<oss>"); #endif @@ -67,7 +69,7 @@ struct device { uint32_t index; char *udi; char *sink_name, *source_name; - int acl_race_fix; + pa_bool_t acl_race_fix; }; struct userdata { @@ -76,6 +78,9 @@ struct userdata { pa_dbus_connection *connection; pa_hashmap *devices; const char *capability; +#ifdef HAVE_ALSA + pa_bool_t use_tsched; +#endif }; struct timerdata { @@ -88,6 +93,9 @@ struct timerdata { static const char* const valid_modargs[] = { "api", +#ifdef HAVE_ALSA + "tsched", +#endif NULL }; @@ -189,12 +197,12 @@ static pa_module* hal_device_load_alsa(struct userdata *u, const char *udi, char *sink_name = pa_sprintf_malloc("alsa_output.%s", strip_udi(udi)); module_name = "module-alsa-sink"; - args = pa_sprintf_malloc("device_id=%u sink_name=%s", card, *sink_name); + args = pa_sprintf_malloc("device_id=%u sink_name=%s tsched=%i", card, *sink_name, (int) u->use_tsched); } else { *source_name = pa_sprintf_malloc("alsa_input.%s", strip_udi(udi)); module_name = "module-alsa-source"; - args = pa_sprintf_malloc("device_id=%u source_name=%s", card, *source_name); + args = pa_sprintf_malloc("device_id=%u source_name=%s tsched=%i", card, *source_name, (int) u->use_tsched); } pa_log_debug("Loading %s with arguments '%s'", module_name, args); @@ -329,7 +337,7 @@ static struct device* hal_device_add(struct userdata *u, const char *udi) { return NULL; d = pa_xnew(struct device, 1); - d->acl_race_fix = 0; + d->acl_race_fix = FALSE; d->udi = pa_xstrdup(udi); d->index = m->index; d->sink_name = sink_name; @@ -560,9 +568,9 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo udi = dbus_message_get_path(message); if ((d = pa_hashmap_get(u->devices, udi))) { - int send_acl_race_fix_message = 0; + pa_bool_t send_acl_race_fix_message = FALSE; - d->acl_race_fix = 0; + d->acl_race_fix = FALSE; if (d->sink_name) { pa_sink *sink; @@ -575,12 +583,12 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo if (pa_sink_suspend(sink, 0) >= 0) pa_scache_play_item_by_name(u->core, "pulse-access", d->sink_name, FALSE, PA_VOLUME_NORM, NULL, NULL); else - d->acl_race_fix = 1; + d->acl_race_fix = TRUE; } else if (!prev_suspended && suspend) { /* suspend */ if (pa_sink_suspend(sink, 1) >= 0) - send_acl_race_fix_message = 1; + send_acl_race_fix_message = TRUE; } } } @@ -594,12 +602,12 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo if (prev_suspended && !suspend) { /* resume */ if (pa_source_suspend(source, 0) < 0) - d->acl_race_fix = 1; + d->acl_race_fix = TRUE; } else if (!prev_suspended && suspend) { /* suspend */ if (pa_source_suspend(source, 0) >= 0) - send_acl_race_fix_message = 1; + send_acl_race_fix_message = TRUE; } } } @@ -615,6 +623,8 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo device_added_cb(u->context, udi); } + return DBUS_HANDLER_RESULT_HANDLED; + } else if (dbus_message_is_signal(message, "org.pulseaudio.Server", "DirtyGiveUpMessage")) { /* We use this message to avoid a dirty race condition when we get an ACLAdded message before the previously owning PA @@ -629,7 +639,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo if ((d = pa_hashmap_get(u->devices, udi)) && d->acl_race_fix) { pa_log_debug("Got dirty give up message for '%s', trying resume ...", udi); - d->acl_race_fix = 0; + d->acl_race_fix = FALSE; if (d->sink_name) { pa_sink *sink; @@ -661,12 +671,14 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, vo } else /* Yes, we don't check the UDI for validity, but hopefully HAL will */ device_added_cb(u->context, udi); + + return DBUS_HANDLER_RESULT_HANDLED; } finish: dbus_error_free(&error); - return DBUS_HANDLER_RESULT_HANDLED; + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } static void hal_context_free(LibHalContext* hal_context) { @@ -720,6 +732,7 @@ int pa__init(pa_module*m) { int n = 0; pa_modargs *ma; const char *api; + pa_bool_t use_tsched = TRUE; pa_assert(m); @@ -730,6 +743,11 @@ int pa__init(pa_module*m) { goto fail; } + if (pa_modargs_get_value_boolean(ma, "tsched", &use_tsched) < 0) { + pa_log("Failed to parse tsched argument."); + goto fail; + } + if ((api = pa_modargs_get_value(ma, "api", NULL))) { int good = 0; @@ -771,6 +789,7 @@ int pa__init(pa_module*m) { u->connection = conn; u->devices = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func); u->capability = api; + u->use_tsched = use_tsched; m->userdata = u; #ifdef HAVE_ALSA @@ -842,8 +861,20 @@ void pa__done(pa_module *m) { if (u->devices) pa_hashmap_free(u->devices, hal_device_free_cb, NULL); - if (u->connection) + if (u->connection) { + DBusError error; + dbus_error_init(&error); + + dbus_bus_remove_match(pa_dbus_connection_get(u->connection), "type='signal',sender='org.freedesktop.Hal', interface='org.freedesktop.Hal.Device.AccessControl'", &error); + dbus_error_free(&error); + + dbus_bus_remove_match(pa_dbus_connection_get(u->connection), "type='signal',interface='org.pulseaudio.Server'", &error); + dbus_error_free(&error); + + dbus_connection_remove_filter(pa_dbus_connection_get(u->connection), filter_cb, u); + pa_dbus_connection_unref(u->connection); + } pa_xfree(u); } diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c index 1890646f..21f2f842 100644 --- a/src/modules/module-tunnel.c +++ b/src/modules/module-tunnel.c @@ -514,7 +514,7 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off case PA_SINK_MESSAGE_SET_STATE: { int r; - if ((r = pa_sink_process_msg(o, code, data, offset, chunk)) >= 0) + if ((r = pa_source_process_msg(o, code, data, offset, chunk)) >= 0) stream_cork_within_thread(u, u->source->state == PA_SOURCE_SUSPENDED); return r; diff --git a/src/modules/module-x11-xsmp.c b/src/modules/module-x11-xsmp.c index 696826d8..0b2e375a 100644 --- a/src/modules/module-x11-xsmp.c +++ b/src/modules/module-x11-xsmp.c @@ -47,7 +47,7 @@ PA_MODULE_AUTHOR("Lennart Poettering"); PA_MODULE_DESCRIPTION("X11 session management"); PA_MODULE_VERSION(PACKAGE_VERSION); -PA_MODULE_LOAD_ONCE(TRUE); +PA_MODULE_LOAD_ONCE(FALSE); PA_MODULE_USAGE("session_manager=<session manager string> display=<X11 display>"); static pa_bool_t ice_in_use = FALSE; |