log: fix memory leak when log to file is enabled
When log to file is enabled, the file is not closed by OpenOCD at exit. This is reported by Valgrind as a memory leak that is still reachable, as the internal buffers of 'FILE *log_output' are freed by the automatic fclose() at exit. Close the log file before exit. Change-Id: Id472c0d04462035254a9b49ecb0a4037263c6f6f Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/6789 Tested-by: jenkins
This commit is contained in:
parent
1536e249f2
commit
492ac453ab
|
@ -302,6 +302,15 @@ void log_init(void)
|
||||||
start = last_time = timeval_ms();
|
start = last_time = timeval_ms();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log_exit(void)
|
||||||
|
{
|
||||||
|
if (log_output && log_output != stderr) {
|
||||||
|
/* Close log file, if it was open and wasn't stderr. */
|
||||||
|
fclose(log_output);
|
||||||
|
}
|
||||||
|
log_output = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int set_log_output(struct command_context *cmd_ctx, FILE *output)
|
int set_log_output(struct command_context *cmd_ctx, FILE *output)
|
||||||
{
|
{
|
||||||
log_output = output;
|
log_output = output;
|
||||||
|
|
|
@ -72,6 +72,7 @@ __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 5, 6)));
|
||||||
* Initialize logging module. Call during program startup.
|
* Initialize logging module. Call during program startup.
|
||||||
*/
|
*/
|
||||||
void log_init(void);
|
void log_init(void);
|
||||||
|
void log_exit(void);
|
||||||
int set_log_output(struct command_context *cmd_ctx, FILE *output);
|
int set_log_output(struct command_context *cmd_ctx, FILE *output);
|
||||||
|
|
||||||
int log_register_commands(struct command_context *cmd_ctx);
|
int log_register_commands(struct command_context *cmd_ctx);
|
||||||
|
|
|
@ -437,6 +437,8 @@ int openocd_main(int argc, char *argv[])
|
||||||
rtt_exit();
|
rtt_exit();
|
||||||
free_config();
|
free_config();
|
||||||
|
|
||||||
|
log_exit();
|
||||||
|
|
||||||
if (ret == ERROR_FAIL)
|
if (ret == ERROR_FAIL)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
else if (ret != ERROR_OK)
|
else if (ret != ERROR_OK)
|
||||||
|
|
Loading…
Reference in New Issue