From bc8cdcefa8fa315820d5c63512556102f415bcfc Mon Sep 17 00:00:00 2001 From: Walter Doekes Date: Tue, 11 Sep 2018 14:22:18 +0200 Subject: [PATCH] optional_api: Remove unused nonoptreq fields As they're not actively used, they only grow stale. The moduleinfo field itself is kept in Asterisk 13/15 for ABI compatibility. ASTERISK-28046 #close Change-Id: I8df66a7007f807840414bb348511a8c14c05a9fc --- res/ari/ari_model_validators.h | 9 ++++----- res/res_stasis_test.c | 19 +++---------------- .../ari_model_validators.h.mustache | 9 ++++----- tests/test_ari_model.c | 8 ++++---- 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/res/ari/ari_model_validators.h b/res/ari/ari_model_validators.h index 328349b34b..3c501cf712 100644 --- a/res/ari/ari_model_validators.h +++ b/res/ari/ari_model_validators.h @@ -23,11 +23,10 @@ * the validator's function pointer. * * The reason for this seamingly useless indirection is the way function - * pointers interfere with module loading. Asterisk attempts to dlopen() each - * module using \c RTLD_LAZY in order to read some metadata from the module. - * Unfortunately, if you take the address of a function, the function has to be - * resolvable at load time, even if \c RTLD_LAZY is specified. By moving the - * function-address-taking into this module, we can once again be lazy. + * pointers used to interfere with module loading. Previously, Asterisk + * attempted to dlopen() each module using \c RTLD_LAZY in order to read some + * metadata from the module. Using functions to get the function pointer + * allowed us to be lazy. */ /* diff --git a/res/res_stasis_test.c b/res/res_stasis_test.c index 19d2a42c6a..416a963fd8 100644 --- a/res/res_stasis_test.c +++ b/res/res_stasis_test.c @@ -100,23 +100,10 @@ struct stasis_message_sink *stasis_message_sink_create(void) * \brief Implementation of the stasis_message_sink_cb() callback. * * Why the roundabout way of exposing this via stasis_message_sink_cb()? Well, - * it has to do with how we load modules. + * it has to do with how we previously loaded modules, using \c RTLD_LAZY. * - * Modules have their own metadata compiled into them in the module info block - * at the end of the file. This includes dependency information in the - * \c nonoptreq field. - * - * Asterisk loads the module, inspects the field, then loads any needed - * dependencies. This works because Asterisk passes \c RTLD_LAZY to the initial - * dlopen(), which defers binding function references until they are called. - * - * But when you take the address of a function, that function needs to be - * available at load time. So if some module used the address of - * message_sink_cb() directly, and \c res_stasis_test.so wasn't loaded yet, then - * that module would fail to load. - * - * The stasis_message_sink_cb() function gives us a layer of indirection so that - * the initial lazy binding will still work as expected. + * The stasis_message_sink_cb() function gave us a layer of indirection so that + * the initial lazy binding would still work as expected. */ static void message_sink_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message) diff --git a/rest-api-templates/ari_model_validators.h.mustache b/rest-api-templates/ari_model_validators.h.mustache index 0223a68a70..0b055db5af 100644 --- a/rest-api-templates/ari_model_validators.h.mustache +++ b/rest-api-templates/ari_model_validators.h.mustache @@ -23,11 +23,10 @@ * the validator's function pointer. * * The reason for this seamingly useless indirection is the way function - * pointers interfere with module loading. Asterisk attempts to dlopen() each - * module using \c RTLD_LAZY in order to read some metadata from the module. - * Unfortunately, if you take the address of a function, the function has to be - * resolvable at load time, even if \c RTLD_LAZY is specified. By moving the - * function-address-taking into this module, we can once again be lazy. + * pointers used to interfere with module loading. Previously, Asterisk + * attempted to dlopen() each module using \c RTLD_LAZY in order to read some + * metadata from the module. Using functions to get the function pointer + * allowed us to be lazy. */ /* diff --git a/tests/test_ari_model.c b/tests/test_ari_model.c index e5a96cdd1b..1ab42dd9bb 100644 --- a/tests/test_ari_model.c +++ b/tests/test_ari_model.c @@ -40,8 +40,8 @@ /*! * Wrapper of ast_test_validate_int() so an external function pointer is not used. * - * \note Must do this because using an external function pointer - * does not play nicely when loading with RTLD_LAZY. + * \note We do this because using an external function pointer + * did not play nicely when we loaded with RTLD_LAZY. */ static int wrap_ast_ari_validate_int(struct ast_json *json) { @@ -53,8 +53,8 @@ static int wrap_ast_ari_validate_int(struct ast_json *json) /*! * Wrapper of ast_ari_validate_string() so an external function pointer is not used. * - * \note Must do this because using an external function pointer - * does not play nicely when loading with RTLD_LAZY. + * \note We do this because using an external function pointer + * did not play nicely when we loaded with RTLD_LAZY. */ static int wrap_ast_ari_validate_string(struct ast_json *json) {