fix shutdown when --disallow-module-loading=1 is passed

This commit is contained in:
Lennart Poettering 2008-08-05 23:56:25 +02:00
parent ca127532fc
commit 34dd4a20f2
26 changed files with 62 additions and 58 deletions

View file

@ -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;
}

View file

@ -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:

View file

@ -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)

View file

@ -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);

View file

@ -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);
}