Browse Source

libobs: Fix memory leak (Enforce cache limit)

Under certain circumstances the cache could be prone to growing too
large unintentionally.  Setting a hard maximum limit should prevent
memory from growing if we suddenly get a lot of frames.
jp9000 10 years ago
parent
commit
4459ed3e2c
1 changed files with 8 additions and 0 deletions
  1. 8 0
      libobs/obs-source.c

+ 8 - 0
libobs/obs-source.c

@@ -1629,6 +1629,8 @@ static inline void free_async_cache(struct obs_source *source)
 	da_resize(source->async_frames, 0);
 }
 
+#define CACHE_LIMIT 30
+
 static inline struct obs_source_frame *cache_video(struct obs_source *source,
 		const struct obs_source_frame *frame)
 {
@@ -1657,6 +1659,12 @@ static inline struct obs_source_frame *cache_video(struct obs_source *source,
 	}
 
 	if (!new_frame) {
+		/* ignore frames if cache limit reached */
+		if (source->async_cache.num == CACHE_LIMIT) {
+			pthread_mutex_unlock(&source->async_mutex);
+			return NULL;
+		}
+
 		struct async_frame new_af;
 
 		new_frame = obs_source_frame_create(frame->format,