mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-14 23:34:08 +00:00
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:
parent
fa35fd0f55
commit
82b5a39ea4
|
@ -270,8 +270,8 @@ struct obs_core_video {
|
|||
gs_samplerstate_t *point_sampler;
|
||||
gs_stagesurf_t *mapped_surfaces[NUM_CHANNELS];
|
||||
int cur_texture;
|
||||
long raw_active;
|
||||
long gpu_encoder_active;
|
||||
volatile long raw_active;
|
||||
volatile long gpu_encoder_active;
|
||||
pthread_mutex_t gpu_encoder_mutex;
|
||||
struct circlebuf gpu_encoder_queue;
|
||||
struct circlebuf gpu_encoder_avail_queue;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue