[asterisk-dev] [asterisk-commits] mvanbaak: branch group/res_clialiases r150726 - in /team/group/res_clialiases...
Eliel Sardañons
eliel at eliel.net
Sun Oct 19 00:17:18 CDT 2008
mvanbaak,
If I am not wrong, your call to clialiases_atloaded() (when
registered _atstart) wont do anything because of the
CONFIG_STATUS_FILEUNCHANGED being returned because the file did not
change.
Eliel Sardañons
LU1ALY
On 10/17/08, SVN commits to the Asterisk project
<asterisk-commits at lists.digium.com> wrote:
> Author: mvanbaak
> Date: Fri Oct 17 13:59:14 2008
> New Revision: 150726
>
> URL: http://svn.digium.com/view/asterisk?view=rev&rev=150726
> Log:
> - add ability to run callback functions when asterisk is loaded
> - register callback to reload the clialiases.conf file once asterisk is loaded
>
> Modified:
> team/group/res_clialiases/include/asterisk.h
> team/group/res_clialiases/main/asterisk.c
> team/group/res_clialiases/res/res_clialiases.c
>
> Modified: team/group/res_clialiases/include/asterisk.h
> URL: http://svn.digium.com/view/asterisk/team/group/res_clialiases/include/asterisk.h?view=diff&rev=150726&r1=150725&r2=150726
> ==============================================================================
> --- team/group/res_clialiases/include/asterisk.h (original)
> +++ team/group/res_clialiases/include/asterisk.h Fri Oct 17 13:59:14 2008
> @@ -59,6 +59,21 @@
> * \param func The callback function to unregister.
> */
> void ast_unregister_atexit(void (*func)(void));
> +
> +/*!
> + * \brief Register a function to be executed after Asterisk started.
> + * \param func The callback function to use.
> + *
> + * \retval 0 on success.
> + * \retval -1 on error.
> + */
> +int ast_register_atstarted(void (*func)(void));
> +
> +/*!
> + * \brief Unregister a function registered with ast_register_atstarted().
> + * \param func The callback function to unregister.
> + */
> +void ast_unregister_atstarted(void (*func)(void));
>
> #if !defined(LOW_MEMORY)
> /*!
>
> Modified: team/group/res_clialiases/main/asterisk.c
> URL: http://svn.digium.com/view/asterisk/team/group/res_clialiases/main/asterisk.c?view=diff&rev=150726&r1=150725&r2=150726
> ==============================================================================
> --- team/group/res_clialiases/main/asterisk.c (original)
> +++ team/group/res_clialiases/main/asterisk.c Fri Oct 17 13:59:14 2008
> @@ -184,6 +184,13 @@
>
> static AST_RWLIST_HEAD_STATIC(atexits, ast_atexit);
>
> +struct ast_atstarted {
> + void (*func)(void);
> + AST_RWLIST_ENTRY(ast_atstarted) list;
> +};
> +
> +static AST_RWLIST_HEAD_STATIC(atstarteds, ast_atstarted);
> +
> struct timeval ast_startuptime;
> struct timeval ast_lastreloadtime;
>
> @@ -799,6 +806,42 @@
> }
> AST_RWLIST_TRAVERSE_SAFE_END;
> AST_RWLIST_UNLOCK(&atexits);
> +
> + if (ae)
> + free(ae);
> +}
> +
> +int ast_register_atstarted(void (*func)(void))
> +{
> + struct ast_atstarted *ae;
> +
> + if (!(ae = ast_calloc(1, sizeof(*ae))))
> + return -1;
> +
> + ae->func = func;
> +
> + ast_unregister_atstarted(func);
> +
> + AST_RWLIST_WRLOCK(&atstarteds);
> + AST_RWLIST_INSERT_HEAD(&atstarteds, ae, list);
> + AST_RWLIST_UNLOCK(&atstarteds);
> +
> + return 0;
> +}
> +
> +void ast_unregister_atstarted(void (*func)(void))
> +{
> + struct ast_atstarted *ae = NULL;
> +
> + AST_RWLIST_WRLOCK(&atstarteds);
> + AST_RWLIST_TRAVERSE_SAFE_BEGIN(&atstarteds, ae, list) {
> + if (ae->func == func) {
> + AST_RWLIST_REMOVE_CURRENT(list);
> + break;
> + }
> + }
> + AST_RWLIST_TRAVERSE_SAFE_END;
> + AST_RWLIST_UNLOCK(&atstarteds);
>
> if (ae)
> free(ae);
> @@ -1324,6 +1367,17 @@
> ae->func();
> }
> AST_RWLIST_UNLOCK(&atexits);
> +}
> +
> +static void ast_run_atstarteds(void)
> +{
> + struct ast_atstarted *ae;
> + AST_RWLIST_RDLOCK(&atstarteds);
> + AST_RWLIST_TRAVERSE(&atstarteds, ae, list) {
> + if (ae->func)
> + ae->func();
> + }
> + AST_RWLIST_UNLOCK(&atstarteds);
> }
>
> static void quit_handler(int num, int niceness, int safeshutdown, int restart)
> @@ -3334,6 +3388,9 @@
>
> dnsmgr_start_refresh();
>
> + /* run commands for post startup */
> + ast_run_atstarteds();
> +
> /* We might have the option of showing a console, but for now just
> do nothing... */
> if (ast_opt_console && !option_verbose)
>
> Modified: team/group/res_clialiases/res/res_clialiases.c
> URL: http://svn.digium.com/view/asterisk/team/group/res_clialiases/res/res_clialiases.c?view=diff&rev=150726&r1=150725&r2=150726
> ==============================================================================
> --- team/group/res_clialiases/res/res_clialiases.c (original)
> +++ team/group/res_clialiases/res/res_clialiases.c Fri Oct 17 13:59:14 2008
> @@ -257,6 +257,11 @@
> return 0;
> }
>
> +static void clialiases_atloaded(void)
> +{
> + load_config(1);
> +}
> +
> /*! \brief Function called to unload the module */
> static int unload_module(void)
> {
> @@ -277,6 +282,7 @@
> load_config(0);
>
> ast_cli_register_multiple(cli_alias, sizeof(cli_alias) / sizeof(struct ast_cli_entry));
> + ast_register_atstarted(clialiases_atloaded);
>
> return AST_MODULE_LOAD_SUCCESS;
> }
>
>
> _______________________________________________
> --Bandwidth and Colocation Provided by http://www.api-digital.com--
>
> asterisk-commits mailing list
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-commits
>
More information about the asterisk-dev
mailing list