return server;
}
-static void virtual_server_free(virtual_server_t *server)
+static int virtual_server_free(void *ctx)
{
- if (!server) return;
+ virtual_server_t *server;
+ server = talloc_get_type_abort(ctx, virtual_server_t);
if (server->components) rbtree_free(server->components);
- server->components = NULL;
-
- talloc_free(server);
+ return 0;
}
void virtual_servers_free(time_t when)
if ((when == 0) ||
((server->created < when) && server->can_free)) {
*last = server->next;
- virtual_server_free(server);
+ talloc_free(server);
} else {
last = &(server->next);
}
goto error;
}
- server = talloc(cs, virtual_server_t);
+ server = talloc_zero(cs, virtual_server_t);
server->name = name;
server->created = time(NULL);
server->cs = cs;
server->components = components;
+ talloc_set_destructor((void *) server, virtual_server_free);
/*
* Define types first.
radlog(L_ERR, "Failed to load virtual server %s",
(name != NULL) ? name : "<default>");
}
- virtual_server_free(server);
+ talloc_free(server);
return -1;
}