fix: guard pw timer & stream for null

This commit is contained in:
2 * r + 2 * t 2026-04-02 15:03:52 +11:00
parent 36aac876cc
commit a2a63977c1

View file

@ -30,6 +30,12 @@ PipeWireWorker::PipeWireWorker(std::stop_token token, AudioCollector* collector)
timespec timeout = { 0, 10 * SPA_NSEC_PER_MSEC }; timespec timeout = { 0, 10 * SPA_NSEC_PER_MSEC };
m_timer = pw_loop_add_timer(pw_main_loop_get_loop(m_loop), handleTimeout, this); 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); pw_loop_update_timer(pw_main_loop_get_loop(m_loop), m_timer, &timeout, &timeout, false);
auto props = pw_properties_new( 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); params[0] = spa_format_audio_raw_build(&b, SPA_PARAM_EnumFormat, &info);
pw_stream_events events{}; pw_stream_events events{};
events.version = PW_VERSION_STREAM_EVENTS;
events.state_changed = [](void* data, pw_stream_state, pw_stream_state state, const char*) { events.state_changed = [](void* data, pw_stream_state, pw_stream_state state, const char*) {
auto* self = static_cast<PipeWireWorker*>(data); auto* self = static_cast<PipeWireWorker*>(data);
self->streamStateChanged(state); 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); 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, const int success = pw_stream_connect(m_stream, PW_DIRECTION_INPUT, PW_ID_ANY,
static_cast<pw_stream_flags>( static_cast<pw_stream_flags>(