From 59ffaa41f0390914584f44293d5aed0a34e85b87 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sat, 9 May 2009 02:37:35 +0300 Subject: video_out.c: Fix a minor memory leak The code that loops over possible video output drivers and tries to find a working one does not free and reallocate the 'struct vo' if a driver's preinit() call fails, but just overwrites the same struct instead. This means that any memory the failing driver allocated as a talloc subcontext will not be freed immediately. This is not even a real leak as the memory will be freed once the VO is closed, but it's still nicer to free things immediately. Add talloc_free_children() to free any such talloc subcontexts that were created during the failing preinit(). --- libvo/video_out.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libvo/video_out.c b/libvo/video_out.c index 73926c541e..7fd2fb21af 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -364,6 +364,7 @@ struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11, free(name); return vo; // success! } + talloc_free_children(vo); } } // continue... @@ -380,6 +381,7 @@ struct vo *init_best_video_out(struct MPOpts *opts, struct vo_x11_state *x11, vo->driver = video_driver; if (!vo_preinit(vo, vo_subdevice)) return vo; // success! + talloc_free_children(vo); } free(vo); return NULL; -- cgit v1.2.3