aasink: fix context initialisation and freeing to not leak
authorStefan Kost <ensonic@users.sf.net>
Thu, 9 Sep 2010 18:42:46 +0000 (21:42 +0300)
committerStefan Kost <ensonic@users.sf.net>
Thu, 9 Sep 2010 18:49:43 +0000 (21:49 +0300)
ext/aalib/gstaasink.c

index ea27a67..d5d4e2d 100644 (file)
@@ -482,17 +482,18 @@ gst_aasink_get_property (GObject * object, guint prop_id, GValue * value,
 static gboolean
 gst_aasink_open (GstAASink * aasink)
 {
-  aa_recommendhidisplay (aa_drivers[aasink->aa_driver]->shortname);
-
-  aasink->context = aa_autoinit (&aasink->ascii_surf);
-  if (aasink->context == NULL) {
-    GST_ELEMENT_ERROR (GST_ELEMENT (aasink), LIBRARY, TOO_LAZY, (NULL),
-        ("error opening aalib context"));
-    return FALSE;
+  if (!aasink->context) {
+    aa_recommendhidisplay (aa_drivers[aasink->aa_driver]->shortname);
+
+    aasink->context = aa_autoinit (&aasink->ascii_surf);
+    if (aasink->context == NULL) {
+      GST_ELEMENT_ERROR (GST_ELEMENT (aasink), LIBRARY, TOO_LAZY, (NULL),
+          ("error opening aalib context"));
+      return FALSE;
+    }
+    aa_autoinitkbd (aasink->context, 0);
+    aa_resizehandler (aasink->context, (void *) aa_resize);
   }
-  aa_autoinitkbd (aasink->context, 0);
-  aa_resizehandler (aasink->context, (void *) aa_resize);
-
   return TRUE;
 }
 
@@ -500,6 +501,7 @@ static gboolean
 gst_aasink_close (GstAASink * aasink)
 {
   aa_close (aasink->context);
+  aasink->context = NULL;
 
   return TRUE;
 }