fix another memory leak
In sys_early_init(), the values for sysopt.gdbpath and
sysopt.greppath were being assigned by calling dupstr()
without ensuring that a value previously assigned by
dupstr() were free()'d.
Also, the sysopt struct definition is changed to sysopt_s,
not because there's anything wrong with the original
struct sysopt sysopt;
but because I couldn't convince the debugger to use the
correct thing when trying to track down the leak.
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
#ifndef SYS_H
|
#ifndef SYS_H
|
||||||
#define SYS_H
|
#define SYS_H
|
||||||
|
|
||||||
struct sysopt {
|
struct sysopt_s {
|
||||||
char *support; /* local support contact */
|
char *support; /* local support contact */
|
||||||
char *recover; /* how to run recover - may be overridden by win port */
|
char *recover; /* how to run recover - may be overridden by win port */
|
||||||
char *wizards; /* space-separated list of usernames */
|
char *wizards; /* space-separated list of usernames */
|
||||||
@@ -60,7 +60,7 @@ struct sysopt {
|
|||||||
* 1: suppress it */
|
* 1: suppress it */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct sysopt sysopt;
|
extern struct sysopt_s sysopt;
|
||||||
|
|
||||||
#define SYSOPT_SEDUCE sysopt.seduce
|
#define SYSOPT_SEDUCE sysopt.seduce
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
at runtime by setting up a value for "DEBUGFILES" in the environment */
|
at runtime by setting up a value for "DEBUGFILES" in the environment */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct sysopt sysopt;
|
struct sysopt_s sysopt;
|
||||||
|
|
||||||
void
|
void
|
||||||
sys_early_init(void)
|
sys_early_init(void)
|
||||||
@@ -66,7 +66,11 @@ sys_early_init(void)
|
|||||||
|
|
||||||
#ifdef PANICTRACE
|
#ifdef PANICTRACE
|
||||||
/* panic options */
|
/* panic options */
|
||||||
|
if (sysopt.gdbpath)
|
||||||
|
free((genericptr_t) sysopt.gdbpath), sysopt.gdbpath = 0;
|
||||||
sysopt.gdbpath = dupstr(GDBPATH);
|
sysopt.gdbpath = dupstr(GDBPATH);
|
||||||
|
if (sysopt.greppath)
|
||||||
|
free((genericptr_t) sysopt.greppath), sysopt.greppath = 0;
|
||||||
sysopt.greppath = dupstr(GREPPATH);
|
sysopt.greppath = dupstr(GREPPATH);
|
||||||
#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
|
#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
|
||||||
sysopt.panictrace_gdb = 1;
|
sysopt.panictrace_gdb = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user