diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index 1766abb01..13e8c7ed1 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -554,6 +554,12 @@ static inline bool obs_weak_ref_get_ref(struct obs_weak_ref *ref) return false; } +static inline bool obs_weak_ref_expired(struct obs_weak_ref *ref) +{ + long owners = os_atomic_load_long(&ref->refs); + return owners < 0; +} + /* ------------------------------------------------------------------------- */ /* sources */ diff --git a/libobs/obs-source.c b/libobs/obs-source.c index 5db687b99..02d47606f 100644 --- a/libobs/obs-source.c +++ b/libobs/obs-source.c @@ -774,6 +774,11 @@ obs_source_t *obs_weak_source_get_source(obs_weak_source_t *weak) return NULL; } +bool obs_weak_source_expired(obs_weak_source_t *weak) +{ + return weak ? obs_weak_ref_expired(&weak->ref) : true; +} + bool obs_weak_source_references_source(obs_weak_source_t *weak, obs_source_t *source) { diff --git a/libobs/obs.h b/libobs/obs.h index 30f6d11af..7d0924938 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -900,6 +900,7 @@ EXPORT void obs_weak_source_release(obs_weak_source_t *weak); EXPORT obs_source_t *obs_source_get_ref(obs_source_t *source); EXPORT obs_weak_source_t *obs_source_get_weak_source(obs_source_t *source); EXPORT obs_source_t *obs_weak_source_get_source(obs_weak_source_t *weak); +EXPORT bool obs_weak_source_expired(obs_weak_source_t *weak); EXPORT bool obs_weak_source_references_source(obs_weak_source_t *weak, obs_source_t *source);