From a2a63977c1b165d828c2d6576db7f1a425b72bc0 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 2 Apr 2026 15:03:52 +1100 Subject: [PATCH] fix: guard pw timer & stream for null --- plugin/src/Caelestia/Services/audiocollector.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plugin/src/Caelestia/Services/audiocollector.cpp b/plugin/src/Caelestia/Services/audiocollector.cpp index fb051ccb..72b9ce6b 100644 --- a/plugin/src/Caelestia/Services/audiocollector.cpp +++ b/plugin/src/Caelestia/Services/audiocollector.cpp @@ -30,6 +30,12 @@ PipeWireWorker::PipeWireWorker(std::stop_token token, AudioCollector* collector) timespec timeout = { 0, 10 * SPA_NSEC_PER_MSEC }; m_timer = pw_loop_add_timer(pw_main_loop_get_loop(m_loop), handleTimeout, this); + if (!m_timer) { + qWarning() << "PipeWireWorker::init: failed to create timer"; + pw_main_loop_destroy(m_loop); + pw_deinit(); + return; + } pw_loop_update_timer(pw_main_loop_get_loop(m_loop), m_timer, &timeout, &timeout, false); auto props = pw_properties_new( @@ -55,6 +61,7 @@ PipeWireWorker::PipeWireWorker(std::stop_token token, AudioCollector* collector) params[0] = spa_format_audio_raw_build(&b, SPA_PARAM_EnumFormat, &info); pw_stream_events events{}; + events.version = PW_VERSION_STREAM_EVENTS; events.state_changed = [](void* data, pw_stream_state, pw_stream_state state, const char*) { auto* self = static_cast(data); self->streamStateChanged(state); @@ -65,6 +72,12 @@ PipeWireWorker::PipeWireWorker(std::stop_token token, AudioCollector* collector) }; m_stream = pw_stream_new_simple(pw_main_loop_get_loop(m_loop), "caelestia-shell", props, &events, this); + if (!m_stream) { + qWarning() << "PipeWireWorker::init: failed to create stream"; + pw_main_loop_destroy(m_loop); + pw_deinit(); + return; + } const int success = pw_stream_connect(m_stream, PW_DIRECTION_INPUT, PW_ID_ANY, static_cast(