Fix memory leak for built-in commands.
This commit is contained in:
parent
1dc79c641c
commit
2352e5a0dd
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user