Detach shared capture safely while its audio buffer is resizing

This commit is contained in:
evgeny committed 2026-10-16 17:12:51 +02:00
1 parent 3c73c7d645
commit efe9e8311c
3 files changed
+8 -5

No files matched your search

+4 -1
View File
@@ -157,7 +157,7 @@ void AudioCapture::close() {
/* Callback отсоединён в GUI; session и контекст должны жить до завершения ma_device_uninit. */
void AudioCapture::closeAsync() {
if (closing()) return;
if (!m_closeDone.load(std::memory_order_acquire)) return;
if (m_closeThread.joinable()) m_closeThread.join();
auto session = detach();
if (!session) return;
@@ -184,6 +184,9 @@ void AudioCapture::closeAsync() {
}
void AudioCapture::recover() { if (m_session) m_session->recover(); }
bool AudioCapture::closing() const {
return !m_closeDone.load(std::memory_order_acquire) || (m_session && m_session->device.closing());
}
bool AudioCapture::running() const {
return m_session && m_prepared && m_session->device.initialized() && ma_device_is_started(m_session->device.device());
}