bluetooth: Fix unregistering of the message handler

In cases, where codec initialisation may fail, we still try
unregistering the message handler. Do not try unregistering
the handler if it was not registered in the first place.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/483>
This commit is contained in:
Sanchayan Maity 2021-01-21 18:41:25 +05:30
parent 3a4038f3ff
commit 8816b6b05b

View file

@ -145,6 +145,8 @@ struct userdata {
pa_sample_spec decoder_sample_spec; pa_sample_spec decoder_sample_spec;
void *decoder_buffer; /* Codec transfer buffer */ void *decoder_buffer; /* Codec transfer buffer */
size_t decoder_buffer_size; /* Size of the buffer */ size_t decoder_buffer_size; /* Size of the buffer */
bool message_handler_registered;
}; };
typedef enum pa_bluetooth_form_factor { typedef enum pa_bluetooth_form_factor {
@ -2492,6 +2494,7 @@ int pa__init(pa_module* m) {
m->userdata = u = pa_xnew0(struct userdata, 1); m->userdata = u = pa_xnew0(struct userdata, 1);
u->module = m; u->module = m;
u->core = m->core; u->core = m->core;
u->message_handler_registered = false;
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) { if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log_error("Failed to parse module arguments"); pa_log_error("Failed to parse module arguments");
@ -2562,6 +2565,7 @@ int pa__init(pa_module* m) {
bluez5_device_message_handler, (void *) u); bluez5_device_message_handler, (void *) u);
pa_log_info("Bluez5 device message handler registered at path: %s", message_handler_path); pa_log_info("Bluez5 device message handler registered at path: %s", message_handler_path);
pa_xfree(message_handler_path); pa_xfree(message_handler_path);
u->message_handler_registered = true;
return 0; return 0;
@ -2593,9 +2597,11 @@ void pa__done(pa_module *m) {
if (!(u = m->userdata)) if (!(u = m->userdata))
return; return;
message_handler_path = make_message_handler_path(u->card->name); if (u->message_handler_registered) {
pa_message_handler_unregister(m->core, message_handler_path); message_handler_path = make_message_handler_path(u->card->name);
pa_xfree(message_handler_path); pa_message_handler_unregister(m->core, message_handler_path);
pa_xfree(message_handler_path);
}
stop_thread(u); stop_thread(u);