[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