Fix memory leaks found by Valgrind.

This commit is contained in:
Guus Sliepen 2014-12-24 17:31:33 +01:00
parent d00d8dbb9b
commit 3df86ef17b
3 changed files with 19 additions and 18 deletions

View file

@ -1114,7 +1114,7 @@ void close_network_connections(void) {
if (!device_standby) if (!device_standby)
device_disable(); device_disable();
if(myport) free(myport); free(myport);
if (device_fd >= 0) if (device_fd >= 0)
io_del(&device_io); io_del(&device_io);
@ -1124,7 +1124,8 @@ void close_network_connections(void) {
exit_control(); exit_control();
free(myname); free(myname);
myname = NULL; free(scriptextension);
free(scriptinterpreter);
return; return;
} }

View file

@ -99,5 +99,7 @@ void crypto_init(void) {
void crypto_exit(void) { void crypto_exit(void) {
EVP_cleanup(); EVP_cleanup();
ERR_free_strings();
ENGINE_cleanup();
random_exit(); random_exit();
} }

View file

@ -207,21 +207,21 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
// Prepare environment variables to be passed to the script // Prepare environment variables to be passed to the script
char *envp[10] = {NULL}; char *envp[10] = {NULL};
xasprintf(&envp[0], "NETNAME=%s", netname ? : ""); int n = 0;
xasprintf(&envp[1], "DEVICE=%s", device ? : ""); xasprintf(&envp[n++], "NETNAME=%s", netname ? : "");
xasprintf(&envp[2], "INTERFACE=%s", iface ? : ""); xasprintf(&envp[n++], "DEVICE=%s", device ? : "");
xasprintf(&envp[3], "NODE=%s", owner->name); xasprintf(&envp[n++], "INTERFACE=%s", iface ? : "");
xasprintf(&envp[n++], "NODE=%s", owner->name);
if(owner != myself) { if(owner != myself) {
sockaddr2str(&owner->address, &address, &port); sockaddr2str(&owner->address, &address, &port);
// 4 and 5 are reserved for SUBNET and WEIGHT xasprintf(&envp[n++], "REMOTEADDRESS=%s", address);
xasprintf(&envp[6], "REMOTEADDRESS=%s", address); xasprintf(&envp[n++], "REMOTEPORT=%s", port);
xasprintf(&envp[7], "REMOTEPORT=%s", port);
free(port); free(port);
free(address); free(address);
} }
xasprintf(&envp[8], "NAME=%s", myself->name); xasprintf(&envp[n++], "NAME=%s", myself->name);
name = up ? "subnet-up" : "subnet-down"; name = up ? "subnet-up" : "subnet-down";
@ -238,12 +238,10 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
weight = empty; weight = empty;
// Prepare the SUBNET and WEIGHT variables // Prepare the SUBNET and WEIGHT variables
if(envp[4]) free(envp[n]);
free(envp[4]); free(envp[n + 1]);
if(envp[5]) xasprintf(&envp[n], "SUBNET=%s", netstr);
free(envp[5]); xasprintf(&envp[n + 1], "WEIGHT=%s", weight);
xasprintf(&envp[4], "SUBNET=%s", netstr);
xasprintf(&envp[5], "WEIGHT=%s", weight);
execute_script(name, envp); execute_script(name, envp);
} }
@ -257,8 +255,8 @@ void subnet_update(node_t *owner, subnet_t *subnet, bool up) {
weight = empty; weight = empty;
// Prepare the SUBNET and WEIGHT variables // Prepare the SUBNET and WEIGHT variables
xasprintf(&envp[4], "SUBNET=%s", netstr); xasprintf(&envp[n], "SUBNET=%s", netstr);
xasprintf(&envp[5], "WEIGHT=%s", weight); xasprintf(&envp[n + 1], "WEIGHT=%s", weight);
execute_script(name, envp); execute_script(name, envp);
} }