mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-12 13:30:10 -05:00
fix shutdown when --disallow-module-loading=1 is passed
This commit is contained in:
parent
ca127532fc
commit
34dd4a20f2
26 changed files with 62 additions and 58 deletions
|
|
@ -415,7 +415,7 @@ static int pa_cli_command_unload(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa
|
|||
return -1;
|
||||
}
|
||||
|
||||
pa_module_unload_request(m);
|
||||
pa_module_unload_request(m, FALSE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ static int core_process_msg(pa_msgobject *o, int code, void *userdata, int64_t o
|
|||
switch (code) {
|
||||
|
||||
case PA_CORE_MESSAGE_UNLOAD_MODULE:
|
||||
pa_module_unload(c, userdata);
|
||||
pa_module_unload(c, userdata, TRUE);
|
||||
return 0;
|
||||
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -156,9 +156,6 @@ static void pa_module_free(pa_module *m) {
|
|||
pa_assert(m);
|
||||
pa_assert(m->core);
|
||||
|
||||
if (m->core->disallow_module_loading)
|
||||
return;
|
||||
|
||||
pa_log_info("Unloading \"%s\" (index: #%u).", m->name, m->index);
|
||||
|
||||
if (m->done)
|
||||
|
|
@ -175,22 +172,27 @@ static void pa_module_free(pa_module *m) {
|
|||
pa_xfree(m);
|
||||
}
|
||||
|
||||
void pa_module_unload(pa_core *c, pa_module *m) {
|
||||
void pa_module_unload(pa_core *c, pa_module *m, pa_bool_t force) {
|
||||
pa_assert(c);
|
||||
pa_assert(m);
|
||||
|
||||
pa_assert(c->modules);
|
||||
if (m->core->disallow_module_loading && !force)
|
||||
return;
|
||||
|
||||
if (!(m = pa_idxset_remove_by_data(c->modules, m, NULL)))
|
||||
return;
|
||||
|
||||
pa_module_free(m);
|
||||
}
|
||||
|
||||
void pa_module_unload_by_index(pa_core *c, uint32_t idx) {
|
||||
void pa_module_unload_by_index(pa_core *c, uint32_t idx, pa_bool_t force) {
|
||||
pa_module *m;
|
||||
pa_assert(c);
|
||||
pa_assert(idx != PA_IDXSET_INVALID);
|
||||
|
||||
if (m->core->disallow_module_loading && !force)
|
||||
return;
|
||||
|
||||
if (!(m = pa_idxset_remove_by_index(c->modules, idx)))
|
||||
return;
|
||||
|
||||
|
|
@ -198,7 +200,6 @@ void pa_module_unload_by_index(pa_core *c, uint32_t idx) {
|
|||
}
|
||||
|
||||
void pa_module_unload_all(pa_core *c) {
|
||||
|
||||
pa_assert(c);
|
||||
|
||||
if (c->modules) {
|
||||
|
|
@ -245,7 +246,7 @@ void pa_module_unload_unused(pa_core *c) {
|
|||
if (m->last_used_time + m->core->module_idle_time > now)
|
||||
continue;
|
||||
|
||||
pa_module_unload(c, m);
|
||||
pa_module_unload(c, m, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -262,12 +263,15 @@ static void defer_cb(pa_mainloop_api*api, pa_defer_event *e, void *userdata) {
|
|||
|
||||
while ((m = pa_idxset_iterate(c->modules, &state, NULL)))
|
||||
if (m->unload_requested)
|
||||
pa_module_unload(c, m);
|
||||
pa_module_unload(c, m, TRUE);
|
||||
}
|
||||
|
||||
void pa_module_unload_request(pa_module *m) {
|
||||
void pa_module_unload_request(pa_module *m, pa_bool_t force) {
|
||||
pa_assert(m);
|
||||
|
||||
if (m->core->disallow_module_loading && !force)
|
||||
return;
|
||||
|
||||
m->unload_requested = TRUE;
|
||||
|
||||
if (!m->core->module_defer_unload_event)
|
||||
|
|
|
|||
|
|
@ -52,13 +52,13 @@ struct pa_module {
|
|||
};
|
||||
|
||||
pa_module* pa_module_load(pa_core *c, const char *name, const char*argument);
|
||||
void pa_module_unload(pa_core *c, pa_module *m);
|
||||
void pa_module_unload_by_index(pa_core *c, uint32_t idx);
|
||||
void pa_module_unload(pa_core *c, pa_module *m, pa_bool_t force);
|
||||
void pa_module_unload_by_index(pa_core *c, uint32_t idx, pa_bool_t force);
|
||||
|
||||
void pa_module_unload_all(pa_core *c);
|
||||
void pa_module_unload_unused(pa_core *c);
|
||||
|
||||
void pa_module_unload_request(pa_module *m);
|
||||
void pa_module_unload_request(pa_module *m, pa_bool_t force);
|
||||
|
||||
void pa_module_set_used(pa_module*m, int used);
|
||||
|
||||
|
|
|
|||
|
|
@ -3568,7 +3568,7 @@ static void command_unload_module(PA_GCC_UNUSED pa_pdispatch *pd, PA_GCC_UNUSED
|
|||
m = pa_idxset_get_by_index(c->protocol->core->modules, idx);
|
||||
CHECK_VALIDITY(c->pstream, m, tag, PA_ERR_NOENTITY);
|
||||
|
||||
pa_module_unload_request(m);
|
||||
pa_module_unload_request(m, FALSE);
|
||||
pa_pstream_send_simple_ack(c->pstream, tag);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue