From: Jo?o Paulo Rechi Vita <jprvita@xxxxxxxxx> Previously module-bluez5-discover and module-bluez4-discover were being tracked using their pa_module pointer. But during daemon shutdown these modules are unloaded before module-bluetooth-discover, leaving stale pointers in module-bluetooth-discover's userdata. To avoid this problem this commit makes module-bluetooth-discover keep track of module-bluez5-discover and module-bluez4-discovery by their indexes. --- src/modules/bluetooth/module-bluetooth-discover.c | 29 ++++++++++++++--------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/modules/bluetooth/module-bluetooth-discover.c b/src/modules/bluetooth/module-bluetooth-discover.c index c4fb26a..af43a92 100644 --- a/src/modules/bluetooth/module-bluetooth-discover.c +++ b/src/modules/bluetooth/module-bluetooth-discover.c @@ -35,24 +35,31 @@ PA_MODULE_VERSION(PACKAGE_VERSION); PA_MODULE_LOAD_ONCE(true); struct userdata { - pa_module *bluez5_module; - pa_module *bluez4_module; + uint32_t bluez5_module_idx; + uint32_t bluez4_module_idx; }; int pa__init(pa_module* m) { struct userdata *u; + pa_module *mm; pa_assert(m); m->userdata = u = pa_xnew0(struct userdata, 1); - if (pa_module_exists("module-bluez5-discover")) - u->bluez5_module = pa_module_load(m->core, "module-bluez5-discover", NULL); + if (pa_module_exists("module-bluez5-discover")) { + mm = pa_module_load(m->core, "module-bluez5-discover", NULL); + if (mm) + u->bluez5_module_idx = mm->index; + } - if (pa_module_exists("module-bluez4-discover")) - u->bluez4_module = pa_module_load(m->core, "module-bluez4-discover", NULL); + if (pa_module_exists("module-bluez4-discover")) { + mm = pa_module_load(m->core, "module-bluez4-discover", NULL); + if (mm) + u->bluez4_module_idx = mm->index; + } - if (!u->bluez5_module && !u->bluez4_module) { + if (!u->bluez5_module_idx && !u->bluez4_module_idx) { pa_xfree(u); return -1; } @@ -68,11 +75,11 @@ void pa__done(pa_module* m) { if (!(u = m->userdata)) return; - if (u->bluez5_module) - pa_module_unload(m->core, u->bluez5_module, true); + if (u->bluez5_module_idx) + pa_module_unload_by_index(m->core, u->bluez5_module_idx, true); - if (u->bluez4_module) - pa_module_unload(m->core, u->bluez4_module, true); + if (u->bluez4_module_idx) + pa_module_unload_by_index(m->core, u->bluez4_module_idx, true); pa_xfree(u); } -- 1.8.3.1