From: Alan T. DeKok Date: Thu, 26 Apr 2018 13:05:49 +0000 (-0400) Subject: move instantiation to proper function X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5b15990c0d64b3cb48e12ab1f686c2bf3a2a5f50;p=thirdparty%2Ffreeradius-server.git move instantiation to proper function --- diff --git a/src/lib/io/master.c b/src/lib/io/master.c index e380c3d628f..fed8ab820d9 100644 --- a/src/lib/io/master.c +++ b/src/lib/io/master.c @@ -2061,7 +2061,7 @@ static ssize_t mod_write(void *instance, void *packet_ctx, * */ if (!inst->pending_clients) { - MEM(inst->pending_clients = fr_heap_create(client, pending_client_cmp, + MEM(inst->pending_clients = fr_heap_create(inst->ctx, pending_client_cmp, fr_io_client_t, heap_id)); } @@ -2164,7 +2164,7 @@ static int mod_bootstrap(void *instance, UNUSED CONF_SECTION *cs) if (inst->app_io->bootstrap && (inst->app_io->bootstrap(inst->app_io_instance, inst->app_io_conf) < 0)) { - cf_log_err(inst->app_io_conf, "Bootstrap failed for \"%s\"", inst->app_io->name); + cf_log_err(inst->app_io_conf, "Bootstrap failed for \"proto_%s\"", inst->app_io->name); return -1; } @@ -2185,10 +2185,19 @@ static int mod_instantiate(void *instance, CONF_SECTION *conf) rad_assert(inst->app_io != NULL); + /* + * Create the trie of clients for this socket. + */ + inst->trie = fr_trie_alloc(inst->ctx); + if (!inst->trie) { + cf_log_err(conf, "Instantiation failed for \"proto_%s\"", inst->app_io->name); + return -1; + } + if (inst->app_io->instantiate && (inst->app_io->instantiate(inst->app_io_instance, inst->app_io_conf) < 0)) { - cf_log_err(conf, "Instantiation failed for \"%s\"", inst->app_io->name); + cf_log_err(conf, "Instantiation failed for \"proto_%s\"", inst->app_io->name); return -1; } diff --git a/src/lib/io/master.h b/src/lib/io/master.h index 914a8a533af..9d7384d8db9 100644 --- a/src/lib/io/master.h +++ b/src/lib/io/master.h @@ -60,7 +60,8 @@ typedef struct { typedef struct fr_io_instance_t { int magic; //!< sparkles and unicorns - dl_instance_t const *dl_inst; //!< our parent dl_inst + TALLOC_CTX *ctx; //!< this struct might not be talloc'd + dl_instance_t const *dl_inst; //!< our parent dl_inst uint32_t max_connections; //!< maximum number of connections to allow uint32_t max_clients; //!< maximum number of dynamic clients to allow diff --git a/src/modules/proto_radius/proto_radius.c b/src/modules/proto_radius/proto_radius.c index 0e741bff4b8..c576c674934 100644 --- a/src/modules/proto_radius/proto_radius.c +++ b/src/modules/proto_radius/proto_radius.c @@ -773,13 +773,9 @@ static int mod_instantiate(void *instance, CONF_SECTION *conf) FR_INTEGER_BOUND_CHECK("max_packet_size", inst->max_packet_size, <=, 65535); /* - * Create the trie of clients for this socket. + * Set talloc ctx for master IO. */ - inst->io.trie = fr_trie_alloc(inst); - if (!inst->io.trie) { - cf_log_err(conf, "Instantiation failed for \"%s\"", inst->io.app_io->name); - return -1; - } + inst->io.ctx = inst; /* * Instantiate the master io submodule