mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 23:56:57 +02:00
BUG/MINOR: mworker: fix memory leak due to master-worker fork
Before this fix, startup logs ring was duplicated before the fork(), so master and worker had both the original startup_logs ring and the duplicated one. In the worker context we freed the original ring and used a duplicated one. In the master context we did nothing, but we still create a duplicated copy again and again during the reload. So, let's duplicate startup logs ring only in the worker context. Master continues to use the original ring initialized in init() before its fork().
This commit is contained in:
parent
8dd4efe42f
commit
ae84f06025
@ -2151,8 +2151,6 @@ static void init(int argc, char **argv)
|
||||
struct mworker_proc *child;
|
||||
struct ring *tmp_startup_logs = NULL;
|
||||
|
||||
/* at this point the worker must have his own startup_logs buffer */
|
||||
tmp_startup_logs = startup_logs_dup(startup_logs);
|
||||
worker_pid = fork();
|
||||
switch (worker_pid) {
|
||||
case -1:
|
||||
@ -2160,7 +2158,11 @@ static void init(int argc, char **argv)
|
||||
|
||||
exit(EXIT_FAILURE);
|
||||
case 0:
|
||||
/* in child */
|
||||
/* in child: at this point the worker must have his own startup_logs buffer */
|
||||
tmp_startup_logs = startup_logs_dup(startup_logs);
|
||||
if (tmp_startup_logs == NULL)
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
startup_logs_free(startup_logs);
|
||||
startup_logs = tmp_startup_logs;
|
||||
/* This one must not be exported, it's internal! */
|
||||
|
Loading…
Reference in New Issue
Block a user