From 5faf043f6c99c475a50b4d05ba984ddb6042619d Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 27 Apr 2026 18:44:04 +0200 Subject: [PATCH] roc-source: handle some errors better --- src/modules/module-roc-source.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/modules/module-roc-source.c b/src/modules/module-roc-source.c index 79a5bbc01..cbb40233a 100644 --- a/src/modules/module-roc-source.c +++ b/src/modules/module-roc-source.c @@ -215,25 +215,28 @@ static int start_receiving(struct module_roc_source_data *data) if (roc_receiver_bind(data->receiver, ROC_SLOT_DEFAULT, ROC_INTERFACE_AUDIO_SOURCE, data->local_source_addr) != 0) { pw_log_error("can't connect roc receiver to local source address"); - return -EINVAL; + goto error; } } if (data->local_repair_addr != NULL) { if (roc_receiver_bind(data->receiver, ROC_SLOT_DEFAULT, ROC_INTERFACE_AUDIO_REPAIR, data->local_repair_addr) != 0) { pw_log_error("can't connect roc receiver to local repair address"); - return -EINVAL; + goto error; } } if (data->local_control_addr != NULL) { if (roc_receiver_bind(data->receiver, ROC_SLOT_DEFAULT, ROC_INTERFACE_AUDIO_CONTROL, data->local_control_addr) != 0) { pw_log_error("can't connect roc receiver to local control address"); - return -EINVAL; + goto error; } } data->receiving = true; return 0; +error: + roc_receiver_unlink(data->receiver, ROC_SLOT_DEFAULT); + return -EINVAL; } static int stop_receiving(struct module_roc_source_data *data) @@ -263,7 +266,8 @@ static void on_stream_state_changed(void *d, enum pw_stream_state old, pw_log_error("stream error: %s", error); break; case PW_STREAM_STATE_STREAMING: - start_receiving(data); + if (start_receiving(data) < 0) + pw_impl_module_schedule_destroy(data->module); break; case PW_STREAM_STATE_PAUSED: stop_receiving(data);