Fix memory leak for built-in commands.

This commit is contained in:
Jan Vidar Krey 2011-12-09 16:35:42 +01:00
parent 1dc79c641c
commit 2352e5a0dd

View File

@ -70,6 +70,7 @@ void command_shutdown(struct command_base* cbase)
{ {
commands_builtin_remove(cbase); commands_builtin_remove(cbase);
assert(list_size(cbase->handlers) == 0); assert(list_size(cbase->handlers) == 0);
list_destroy(cbase->handlers);
hub_free(cbase); hub_free(cbase);
} }
@ -980,12 +981,12 @@ static int command_stats(struct command_base* cbase, struct hub_user* user, stru
static struct command_handle* add_builtin(struct command_base* cbase, const char* prefix, const char* args, enum auth_credentials cred, command_handler handler, const char* description) static struct command_handle* add_builtin(struct command_base* cbase, const char* prefix, const char* args, enum auth_credentials cred, command_handler handler, const char* description)
{ {
struct command_handle* handle = (struct command_handle*) hub_malloc_zero(sizeof(struct command_handle)); struct command_handle* handle = (struct command_handle*) hub_malloc_zero(sizeof(struct command_handle));
handle->prefix = strdup(prefix); handle->prefix = prefix;
handle->length = strlen(prefix); handle->length = strlen(prefix);
handle->args = args ? strdup(args) : NULL; handle->args = args;
handle->cred = cred; handle->cred = cred;
handle->handler = handler; handle->handler = handler;
handle->description = strdup(description); handle->description = description;
handle->origin = "built-in"; handle->origin = "built-in";
handle->ptr = cbase; handle->ptr = cbase;
return handle; return handle;
@ -1033,5 +1034,6 @@ void commands_builtin_remove(struct command_base* cbase)
while ((command = list_get_first(cbase->handlers))) while ((command = list_get_first(cbase->handlers)))
{ {
command_del(cbase, command); command_del(cbase, command);
hub_free(command);
} }
} }