From: Matthew Newton Date: Sat, 22 Aug 2020 23:54:36 +0000 (+0100) Subject: rlm_sigtran: thread instance struct X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2a1428483df44296bc102c388c2a454bef6033fb;p=thirdparty%2Ffreeradius-server.git rlm_sigtran: thread instance struct --- diff --git a/src/modules/rlm_sigtran/rlm_sigtran.c b/src/modules/rlm_sigtran/rlm_sigtran.c index 248dc175993..d7c424311df 100644 --- a/src/modules/rlm_sigtran/rlm_sigtran.c +++ b/src/modules/rlm_sigtran/rlm_sigtran.c @@ -200,9 +200,10 @@ fr_dict_attr_autoload_t rlm_sigtran_dict_attr[] = { static rlm_rcode_t CC_HINT(nonnull) mod_authorize(module_ctx_t const *mctx, REQUEST *request) { - rlm_sigtran_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_sigtran_t); + rlm_sigtran_t const *inst = talloc_get_type_abort_const(mctx->instance, rlm_sigtran_t); + rlm_sigtran_thread_t const *t = talloc_get_type_abort_const(mctx->thread, rlm_sigtran_thread_t); - return sigtran_client_map_send_auth_info(inst, request, inst->conn, *(int *)thread); + return sigtran_client_map_send_auth_info(inst, request, inst->conn, t->fd); } /** Convert our sccp address config structure into sockaddr_sccp @@ -305,11 +306,14 @@ static int sigtran_sccp_sockaddr_from_conf(TALLOC_CTX *ctx, rlm_sigtran_t *inst, return 0; } -static int mod_thread_instantiate(UNUSED CONF_SECTION const *cs, UNUSED void *instance, +static int mod_thread_instantiate(UNUSED CONF_SECTION const *cs, void *instance, fr_event_list_t *el, void *thread) { - rlm_sigtran_t *inst = instance; - int fd; + rlm_sigtran_t *inst = instance; + rlm_sigtran_thread_t *t = thread; + int fd; + + t->inst = instance; fd = sigtran_client_thread_register(el); if (fd < 0) { @@ -317,14 +321,16 @@ static int mod_thread_instantiate(UNUSED CONF_SECTION const *cs, UNUSED void *in return -1; } - *((int *)thread) = fd; + t->fd = fd; return 0; } -static int mod_thread_detach(fr_event_list_t *el, UNUSED void *thread) +static int mod_thread_detach(fr_event_list_t *el, void *thread) { - sigtran_client_thread_unregister(el, *(int *)thread); /* Also closes our side */ + rlm_sigtran_thread_t *t = thread; + + sigtran_client_thread_unregister(el, t->fd); /* Also closes our side */ return 0; } @@ -429,7 +435,7 @@ module_t rlm_sigtran = { .name = "sigtran", .type = RLM_TYPE_THREAD_SAFE | RLM_TYPE_RESUMABLE, .inst_size = sizeof(rlm_sigtran_t), - .thread_inst_size = sizeof(int), + .thread_inst_size = sizeof(rlm_sigtran_thread_t), .config = module_config, .instantiate = mod_instantiate, .detach = mod_detach, diff --git a/src/modules/rlm_sigtran/sigtran.h b/src/modules/rlm_sigtran/sigtran.h index 7fc0ddb9498..ac28ebbce45 100644 --- a/src/modules/rlm_sigtran/sigtran.h +++ b/src/modules/rlm_sigtran/sigtran.h @@ -236,6 +236,11 @@ typedef struct rlm_sigtran { tmpl_t *imsi; //!< Subscriber identifier. } rlm_sigtran_t; +typedef struct rlm_sigtran_thread { + rlm_sigtran_t const *inst; //!< Instance of rlm_sigtran + int fd; //!< File descriptor +} rlm_sigtran_thread_t; + extern int ctrl_pipe[2]; extern uint8_t const ascii_to_tbcd[]; extern uint8_t const is_char_tbcd[];