mirror of
https://github.com/unrealircd/unrealircd.git
synced 2026-07-08 11:03:13 +02:00
Fix memory leak in RPC module on server disconnect.
The "rrpc" moddata was not freed, which contained the list of RPC modules on a remote server.
This commit is contained in:
@@ -90,6 +90,7 @@ int rpc_handle_server_quit(Client *client, MessageTag *mtags);
|
||||
int rpc_json_expand_client_server(Client *client, int detail, json_t *j, json_t *child);
|
||||
const char *rrpc_md_serialize(ModData *m);
|
||||
void rrpc_md_unserialize(const char *str, ModData *m);
|
||||
void rrpc_md_free(ModData *m);
|
||||
|
||||
/* Macros */
|
||||
#define RPC_PORT(client) ((client->local && client->local->listener) ? client->local->listener->rpc_options : 0)
|
||||
@@ -163,6 +164,7 @@ MOD_INIT()
|
||||
mreq.type = MODDATATYPE_CLIENT;
|
||||
mreq.serialize = rrpc_md_serialize;
|
||||
mreq.unserialize = rrpc_md_unserialize;
|
||||
mreq.free = rrpc_md_free;
|
||||
mreq.sync = 1;
|
||||
mreq.self_write = 1;
|
||||
rrpc_md = ModDataAdd(modinfo->handle, mreq);
|
||||
@@ -1674,6 +1676,15 @@ void rrpc_md_unserialize(const char *str, ModData *m)
|
||||
}
|
||||
}
|
||||
|
||||
void rrpc_md_free(ModData *m)
|
||||
{
|
||||
if (m->ptr)
|
||||
{
|
||||
free_nvplist(m->ptr);
|
||||
m->ptr = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int rpc_json_expand_client_server(Client *client, int detail, json_t *j, json_t *child)
|
||||
{
|
||||
NameValuePrioList *nv = RRPCMODULES(client);
|
||||
|
||||
Reference in New Issue
Block a user