[vlc-devel] [PATCH] libgoom_plugin.dll mem leak patch

Michael McEll mapei_ at hotmail.com
Thu Jun 11 23:12:47 CEST 2009


On MS Windows libgoom_plugin.dll, when enabled, generates a 2.5meg memleak
when a track playback ends. Problem is visible
on VLC 0.9.x right through to current git master.

Here is a
patch for vlc/modules/visualization/goom.c which works around the the
failings of libgoom2k4 ability to free its resources.
Instead of creating a new instance of libgoom2k4 on each track start, with this patch a single instance will be used throughout.


--- goom.c    2009-06-10 17:21:22.000000000 +0100
+++ mod_goom.c    2009-06-10 18:07:11.796875000 +0100
@@ -90,6 +90,10 @@
  *****************************************************************************/
 #define MAX_BLOCKS 100
 #define GOOM_DELAY 400000
+
+#ifdef WIN32
+static PluginInfo *p_plugin_info;
+#endif
 
 typedef struct
 {
@@ -326,7 +330,9 @@
     audio_date_t i_pts;
     int16_t p_data[2][512];
     int i_data = 0, i_count = 0;
-    PluginInfo *p_plugin_info;
+#ifndef WIN32
+    PluginInfo *p_plugin_info;
+#endif
     int canc = vlc_savecancel ();
 
     width = var_GetInteger( p_this, "goom-width" );
@@ -335,8 +341,12 @@
     speed = var_CreateGetInteger( p_thread, "goom-speed" );
     speed = MAX_SPEED - speed;
     if( speed < 0 ) speed = 0;
-
-    p_plugin_info = goom_init( width, height );
+
+#ifdef WIN32
+    goom_set_resolution(p_plugin_info, width, height);
+#else
+    p_plugin_info = goom_init( width, height );
+#endif
 
     while( vlc_object_alive (p_thread) )
     {
@@ -375,8 +385,9 @@
         p_pic->date = aout_DateGet( &i_pts ) + GOOM_DELAY;
         vout_DisplayPicture( p_thread->p_vout, p_pic );
     }
-
+#ifndef WIN32
     goom_close( p_plugin_info );
+#endif
     vlc_restorecancel (canc);
     return NULL;
 }
@@ -448,3 +459,23 @@
 
     return psz_title;
 }
+
+#ifdef WIN32
+BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
+
+BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+    (void)hinstDLL;
+    (void)lpvReserved;
+    
+    if ( fdwReason == DLL_PROCESS_ATTACH )
+    {
+        p_plugin_info = goom_init(320, 240);
+    }
+    else if ( fdwReason == DLL_PROCESS_DETACH )
+    {
+        goom_close(p_plugin_info);
+    }
+    return 1;
+}
+#endif


_________________________________________________________________
Get the best of MSN on your mobile
http://clk.atdmt.com/UKM/go/147991039/direct/01/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20090611/563d152d/attachment.html>


More information about the vlc-devel mailing list