diff --git a/src/modules/module-protocol-pulse/module.c b/src/modules/module-protocol-pulse/module.c index 2a2434b22..820a0dbed 100644 --- a/src/modules/module-protocol-pulse/module.c +++ b/src/modules/module-protocol-pulse/module.c @@ -92,6 +92,8 @@ void module_free(struct module *module) { struct impl *impl = module->impl; + module_emit_destroy(module); + if (module->idx != SPA_ID_INVALID) pw_map_remove(&impl->modules, module->idx & INDEX_MASK); diff --git a/src/modules/module-protocol-pulse/module.h b/src/modules/module-protocol-pulse/module.h index 4d0e604f9..b5ec49df4 100644 --- a/src/modules/module-protocol-pulse/module.h +++ b/src/modules/module-protocol-pulse/module.h @@ -45,6 +45,7 @@ struct module_events { uint32_t version; void (*loaded) (void *data, int result); + void (*destroy) (void *data); }; struct module_methods { @@ -68,6 +69,7 @@ struct module { }; #define module_emit_loaded(m,r) spa_hook_list_call(&m->listener_list, struct module_events, loaded, 0, r) +#define module_emit_destroy(m) spa_hook_list_call(&(m)->listener_list, struct module_events, destroy, 0) struct module *module_create(struct client *client, const char *name, const char *args); void module_free(struct module *module); diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 456514137..9fa0f2098 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -4666,6 +4666,11 @@ static void on_module_loaded(void *data, int result) free(pm); } +static void on_module_destroy(void *data) +{ + on_module_loaded(data, -ECANCELED); +} + static void on_client_disconnect(void *data) { struct pending_module *pm = data; @@ -4679,6 +4684,7 @@ static int do_load_module(struct client *client, uint32_t command, uint32_t tag, static const struct module_events module_events = { VERSION_MODULE_EVENTS, .loaded = on_module_loaded, + .destroy = on_module_destroy, }; static const struct client_events client_events = { VERSION_CLIENT_EVENTS,