[BRLTTY] brltty 3.7.2 seems to leak memory

Samuel Thibault samuel.thibault at ens-lyon.org
Thu Mar 23 13:18:55 EST 2006


Samuel Thibault, le Thu 23 Mar 2006 19:11:55 +0100, a écrit :
> Samuel Thibault, le Thu 23 Mar 2006 18:59:25 +0100, a écrit :
> > Samuel Thibault, le Thu 23 Mar 2006 18:40:32 +0100, a écrit :
> > > But trying all different drivers one by one made me find that
> > > the PapenMeier seems to leak memory, probably while parsing the
> > > configuration file, I don't know where precisely.
> > 
> > It comes from the realloc() function, which is only used in the
> > reallocateTable() function, used all throughout config.y. Things should
> > get cleaned up here.
> 
> The attached patch fixes the leak on my machine.
> 
> Mario, could you try it? (and apply it to future debian brltty package
> if it works ;) )

Ah, sorry, I missed the !ENABLE_PM_CONFIGURATION_FILE case, here is an
update.

Regards,
Samuel
-------------- next part --------------
Index: BrailleDrivers/Papenmeier/braille.c
===================================================================
--- BrailleDrivers/Papenmeier/braille.c	(révision 2179)
+++ BrailleDrivers/Papenmeier/braille.c	(copie de travail)
@@ -80,6 +80,7 @@
 }
 #else /* ENABLE_PM_CONFIGURATION_FILE */
 #include "brl-cfg.h"
+#define parse_clean()
 #endif /* ENABLE_PM_CONFIGURATION_FILE */
 
 static unsigned int debugKeys = 0;
@@ -1376,6 +1377,7 @@
 
   {
     unsupportedDevice(device);
+    parse_clean();
     return 0;
   }
 
@@ -1398,6 +1400,7 @@
     ++baud;
   }
 
+  parse_clean();
   return 0;
 }
 
@@ -1405,6 +1408,7 @@
 brl_close (BrailleDisplay *brl) {
   io->closePort();
   protocol->releaseResources();
+  parse_clean();
 }
 
 static void
Index: BrailleDrivers/Papenmeier/config.y
===================================================================
--- BrailleDrivers/Papenmeier/config.y	(révision 2179)
+++ BrailleDrivers/Papenmeier/config.y	(copie de travail)
@@ -608,22 +608,27 @@
 
 /* --------------------------------------------------------------- */
 
+void
+parse_clean (void) {
+  while (pmTerminalCount) {
+    TerminalDefinition *terminal = &pmTerminals[--pmTerminalCount];
+    if (terminal->name) free(terminal->name);
+    if (terminal->helpFile) free(terminal->helpFile);
+    if (terminal->statusCells) free(terminal->statusCells);
+    if (terminal->modifiers) free(terminal->modifiers);
+    if (terminal->commands) free(terminal->commands);
+  }
+
+  if (pmTerminals) {
+    free(pmTerminals);
+    pmTerminals = NULL;
+  }
+}
+
 int
 parse (void) {
   if (pmTerminalsAllocated) {
-    while (pmTerminalCount) {
-      TerminalDefinition *terminal = &pmTerminals[--pmTerminalCount];
-      if (terminal->name) free(terminal->name);
-      if (terminal->helpFile) free(terminal->helpFile);
-      if (terminal->statusCells) free(terminal->statusCells);
-      if (terminal->modifiers) free(terminal->modifiers);
-      if (terminal->commands) free(terminal->commands);
-    }
-
-    if (pmTerminals) {
-      free(pmTerminals);
-      pmTerminals = NULL;
-    }
+    parse_clean();
   } else {
     pmTerminalCount = 0;
     pmTerminals = NULL;


More information about the BRLTTY mailing list