Browse Source

libobs: Add obs_weak_source_expired()

jp9000 4 years ago
parent
commit
9819cb2924
3 changed files with 12 additions and 0 deletions
  1. 6 0
      libobs/obs-internal.h
  2. 5 0
      libobs/obs-source.c
  3. 1 0
      libobs/obs.h

+ 6 - 0
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  */
 

+ 5 - 0
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)
 {

+ 1 - 0
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);