diff options
Diffstat (limited to 'servers/audio/audio_server_sw.cpp')
-rw-r--r-- | servers/audio/audio_server_sw.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/servers/audio/audio_server_sw.cpp b/servers/audio/audio_server_sw.cpp index 3c55b10dac..47e4ccbf32 100644 --- a/servers/audio/audio_server_sw.cpp +++ b/servers/audio/audio_server_sw.cpp @@ -693,18 +693,28 @@ void AudioServerSW::stream_set_active(RID p_stream, bool p_active) { Stream *s = stream_owner.get(p_stream); ERR_FAIL_COND(!s); + _THREAD_SAFE_METHOD_ if (s->active==p_active) return; - AUDIO_LOCK; - _THREAD_SAFE_METHOD_ - s->active=p_active; - if (p_active) - s->E=active_audio_streams.push_back(s); - else { - active_audio_streams.erase(s->E); - s->E=NULL; + if (!thread || thread->get_ID()!=Thread::get_caller_ID()) { + //do not lock in mix thread + lock(); + } + { + s->active=p_active; + if (p_active) + s->E=active_audio_streams.push_back(s); + else { + active_audio_streams.erase(s->E); + s->E=NULL; + } + } + if (!thread || thread->get_ID()!=Thread::get_caller_ID()) { + //do not lock in mix thread + unlock(); } + } bool AudioServerSW::stream_is_active(RID p_stream) const { |