Linux: use futex_waitv syscall for atomic waiting

In order to make this possible, some unnecessary features were removed.
This commit is contained in:
Ivan Chikish 2023-07-31 23:57:26 +03:00 committed by Ivan
parent 831a9fe012
commit d34287b2cc
51 changed files with 441 additions and 574 deletions

View file

@ -259,8 +259,8 @@ namespace utils
void audio_decoder::clear()
{
track_fully_decoded = false;
track_fully_consumed = false;
track_fully_decoded = 0;
track_fully_consumed = 0;
has_error = false;
m_size = 0;
duration_ms = 0;
@ -274,7 +274,7 @@ namespace utils
{
auto& thread = *m_thread;
thread = thread_state::aborting;
track_fully_consumed = true;
track_fully_consumed = 1;
track_fully_consumed.notify_one();
thread();
m_thread.reset();
@ -511,7 +511,7 @@ namespace utils
media_log.notice("audio_decoder: about to decode: %s (index=%d)", ::at32(m_context.playlist, m_context.current_track), m_context.current_track);
decode_track(::at32(m_context.playlist, m_context.current_track));
track_fully_decoded = true;
track_fully_decoded = 1;
if (has_error)
{
@ -521,7 +521,7 @@ namespace utils
// Let's only decode one track at a time. Wait for the consumer to finish reading the track.
media_log.notice("audio_decoder: waiting until track is consumed...");
thread_ctrl::wait_on(track_fully_consumed, false);
thread_ctrl::wait_on(track_fully_consumed, 0);
track_fully_consumed = false;
}