libobs: Mark raw_active and gpu_encoder_active as volatile

These were operated on by atomic functions but were not marked as
volatile or loaded with os_atomic_load_long, potentially introducing
subtle race conditions. Detected by ThreadSanitizer.
This commit is contained in:
Richard Stanway
2022-01-16 19:08:41 +01:00
committed by Jim
parent fa35fd0f55
commit 82b5a39ea4
2 changed files with 5 additions and 4 deletions

View File

@@ -931,9 +931,10 @@ bool obs_graphics_thread_loop(struct obs_graphics_context *context)
uint64_t frame_start = os_gettime_ns();
uint64_t frame_time_ns;
bool raw_active = obs->video.raw_active > 0;
bool raw_active = os_atomic_load_long(&obs->video.raw_active) > 0;
#ifdef _WIN32
const bool gpu_active = obs->video.gpu_encoder_active > 0;
const bool gpu_active =
os_atomic_load_long(&obs->video.gpu_encoder_active) > 0;
const bool active = raw_active || gpu_active;
#else
const bool gpu_active = 0;