mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-02 09:01:46 -05:00
tunnel modules: Fix crash when the module was unloaded while waiting for re-init
When the tunnel modules had no connection and a re-init was pending, the module could be unloaded without cancelling the pending re-init. When the timer expired in that situation, this lead to a crash. This patch fixes the problem by keeping a reference when the module is scheduled to be re-initialized. Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/705>
This commit is contained in:
parent
c3d1db2f28
commit
363a384143
5 changed files with 233 additions and 61 deletions
|
|
@ -29,10 +29,20 @@ extern "C" {
|
|||
#include <pulsecore/core.h>
|
||||
#include <pulsecore/thread-mq.h>
|
||||
|
||||
/* Init and exit callbacks of the module */
|
||||
typedef int (*init_cb)(pa_module *m);
|
||||
typedef void (*done_cb)(pa_module *m);
|
||||
/* Restart data structure */
|
||||
typedef struct pa_restart_data pa_restart_data;
|
||||
|
||||
void pa_restart_module_reinit(pa_module *m, init_cb do_init, done_cb do_done, pa_usec_t restart_usec);
|
||||
/* Tears down the module using the done callback and schedules a restart after restart_usec.
|
||||
* Returns a handle to the restart event. When the init callback finishes successfully during
|
||||
* restart or when the restart should be cancelled, the restart event must be destroyed using
|
||||
* pa_restart_free(). */
|
||||
pa_restart_data *pa_restart_module_reinit(pa_module *m, init_cb do_init, done_cb do_done, pa_usec_t restart_usec);
|
||||
|
||||
/* Free the restart event */
|
||||
void pa_restart_free(pa_restart_data *data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue