diff options
Diffstat (limited to 'asterisk.c')
-rw-r--r-- | asterisk.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/asterisk.c b/asterisk.c index d3b3989de..763f56a88 100644 --- a/asterisk.c +++ b/asterisk.c @@ -234,6 +234,8 @@ static int shuttingdown = 0; static int restartnow = 0; static pthread_t consolethread = AST_PTHREADT_NULL; +static unsigned int need_reload; + #if !defined(LOW_MEMORY) struct file_version { AST_LIST_ENTRY(file_version) list; @@ -747,8 +749,7 @@ static void hup_handler(int num) printf("Received HUP signal -- Reloading configs\n"); if (restartnow) execvp(_argv[0], _argv); - /* XXX This could deadlock XXX */ - ast_module_reload(NULL); + need_reload = 1; signal(num, hup_handler); } @@ -1816,6 +1817,11 @@ static void ast_remotecontrol(char * data) } } } + + if (need_reload) { + need_reload = 0; + ast_module_reload(NULL); + } } printf("\nDisconnected from Asterisk server\n"); } @@ -2433,13 +2439,21 @@ int main(int argc, char *argv[]) break; } } + if (need_reload) { + need_reload = 0; + ast_module_reload(NULL); + } } - } /* Do nothing */ for(;;) { /* apparently needed for the MACos */ struct pollfd p = { -1 /* no descriptor */, 0, 0 }; poll(&p, 0, -1); + /* SIGHUP will cause this to break out of poll() */ + if (need_reload) { + need_reload = 0; + ast_module_reload(NULL); + } } return 0; } |