extern int stopping; /* non zero means stopping in progress */
extern int killed; /* >0 means a hard-stop is triggered, >1 means hard-stop immediately */
extern char hostname[MAX_HOSTNAME_LEN];
-extern char localpeer[MAX_HOSTNAME_LEN];
+extern char *localpeer;
extern unsigned int warned; /* bitfield of a few warnings to emit just once */
extern volatile unsigned long sleeping_thread_mask;
extern struct list proc_list; /* list of process in mworker mode */
const struct linger nolinger = { .l_onoff = 1, .l_linger = 0 };
char hostname[MAX_HOSTNAME_LEN];
-char localpeer[MAX_HOSTNAME_LEN];
+char *localpeer = NULL;
static char **old_argv = NULL; /* previous argv but cleaned up */
*/
memset(hostname, 0, sizeof(hostname));
gethostname(hostname, sizeof(hostname) - 1);
- memset(localpeer, 0, sizeof(localpeer));
- memcpy(localpeer, hostname, (sizeof(hostname) > sizeof(localpeer) ? sizeof(localpeer) : sizeof(hostname)) - 1);
+
+ if ((localpeer = strdup(hostname)) == NULL) {
+ ha_alert("Cannot allocate memory for local peer.\n");
+ exit(EXIT_FAILURE);
+ }
setenv("HAPROXY_LOCALPEER", localpeer, 1);
/* we were in mworker mode, we should restart in mworker mode */
case 'm' : global.rlimit_memmax_all = atol(*argv); break;
case 'N' : cfg_maxpconn = atol(*argv); break;
case 'L' :
- strncpy(localpeer, *argv, sizeof(localpeer) - 1);
+ free(localpeer);
+ if ((localpeer = strdup(*argv)) == NULL) {
+ ha_alert("Cannot allocate memory for local peer.\n");
+ exit(EXIT_FAILURE);
+ }
setenv("HAPROXY_LOCALPEER", localpeer, 1);
break;
case 'f' :
free(global.node); global.node = NULL;
free(global.desc); global.desc = NULL;
free(oldpids); oldpids = NULL;
+ free(localpeer); localpeer = NULL;
task_destroy(idle_conn_task);
idle_conn_task = NULL;