mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-08 13:29:59 -05:00
dbus: fix crash on LoadModule()
Commit ae415b07a0 ("dbus: Use hooks for
module new and removed events") changed the new module monitoring from
the asynchronous subscription system. Previously handle_load_module()
created the new pa_dbusiface_module object before we got
a notification of the loading of the module, but now we get the
notification already within the pa_module_load() call. That resulted
in a crash, because the module_new_cb() created the
pa_dbusiface_module object before pa_module_load() returned, and then
handle_load_module() would create another pa_dbusiface_module object
for the same module.
This patch removes the pa_dbusiface_module_new() call from
handle_load_module(). module_new_cb() is now responsible for all
pa_dbusiface_module object creations, except the ones that are created
during the initialization of module-dbus-protocol.
Signed-off-by: Arun Raghavan <arun@arunraghavan.net>
This commit is contained in:
parent
1d5dfccbb2
commit
9c7e4b8eb9
1 changed files with 11 additions and 14 deletions
|
|
@ -1511,9 +1511,8 @@ static void handle_load_module(DBusConnection *conn, DBusMessage *msg, void *use
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbus_module = pa_dbusiface_module_new(module);
|
/* This is created during module loading in module_new_cb() */
|
||||||
pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(module->index), dbus_module);
|
dbus_module = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(module->index));
|
||||||
|
|
||||||
object_path = pa_dbusiface_module_get_path(dbus_module);
|
object_path = pa_dbusiface_module_get_path(dbus_module);
|
||||||
|
|
||||||
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
|
pa_dbus_send_basic_value_reply(conn, msg, DBUS_TYPE_OBJECT_PATH, &object_path);
|
||||||
|
|
@ -1589,7 +1588,6 @@ static pa_hook_result_t module_new_cb(void *hook_data, void *call_data, void *sl
|
||||||
pa_assert(c);
|
pa_assert(c);
|
||||||
pa_assert(module);
|
pa_assert(module);
|
||||||
|
|
||||||
if (!(module_iface = pa_hashmap_get(c->modules, PA_UINT32_TO_PTR(module->index)))) {
|
|
||||||
module_iface = pa_dbusiface_module_new(module);
|
module_iface = pa_dbusiface_module_new(module);
|
||||||
pa_assert_se(pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(module->index), module_iface) >= 0);
|
pa_assert_se(pa_hashmap_put(c->modules, PA_UINT32_TO_PTR(module->index), module_iface) >= 0);
|
||||||
|
|
||||||
|
|
@ -1602,7 +1600,6 @@ static pa_hook_result_t module_new_cb(void *hook_data, void *call_data, void *sl
|
||||||
|
|
||||||
pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
|
pa_dbus_protocol_send_signal(c->dbus_protocol, signal_msg);
|
||||||
dbus_message_unref(signal_msg);
|
dbus_message_unref(signal_msg);
|
||||||
}
|
|
||||||
|
|
||||||
return PA_HOOK_OK;
|
return PA_HOOK_OK;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue