13
0

Fix a tiny memory-leak when calling vfork

This commit is contained in:
Robin Gareus 2018-11-29 02:06:42 +01:00
parent 6fc2804414
commit 1759d1c9c9
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 16 additions and 2 deletions

View File

@ -231,6 +231,9 @@ class LIBPBD_API SystemExec
void make_wargs(char **);
#else
pid_t pid;
# ifndef NO_VFORK
char **argx;
# endif
#endif
void init ();
pthread_mutex_t write_lock;

View File

@ -171,6 +171,8 @@ SystemExec::init ()
stdoutP[0] = stdoutP[1] = INVALID_HANDLE_VALUE;
stderrP[0] = stderrP[1] = INVALID_HANDLE_VALUE;
w_args = NULL;
#elif !defined NO_VFORK
argx = NULL;
#endif
}
@ -356,6 +358,14 @@ SystemExec::~SystemExec ()
}
#ifdef PLATFORM_WINDOWS
if (w_args) free(w_args);
#elif !defined NO_VFORK
if (argx) {
/* argx[0 .. 8] are fixed parameters to vfork-exec-wrapper */
for (int i = 0; i < 9; ++i) {
free (argx[i]);
}
free (argx);
}
#endif
pthread_mutex_destroy(&write_lock);
}
@ -911,8 +921,9 @@ SystemExec::start (int stderr_mode, const char *vfork_exec_wrapper)
*/
int argn = 0;
for (int i=0;argp[i];++i) { argn++; }
char **argx = (char **) malloc((argn + 10) * sizeof(char *));
argx[0] = strdup(vfork_exec_wrapper); // XXX
argx = (char **) malloc((argn + 10) * sizeof(char *));
argx[0] = strdup(vfork_exec_wrapper);
#define FDARG(NUM, FDN) \
argx[NUM] = (char*) calloc(6, sizeof(char)); snprintf(argx[NUM], 6, "%d", FDN);