]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge Script <automerge@asterisk.org>
Tue, 30 Jan 2007 18:14:52 +0000 (18:14 +0000)
committerAutomerge Script <automerge@asterisk.org>
Tue, 30 Jan 2007 18:14:52 +0000 (18:14 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@52949 65c4cc65-6c06-0410-ace0-fbb531ad65f3

asterisk.c

index d3b3989dea5278c8160751ade17d71c16c1452e2..763f56a8884c4a365783a4f89721bc3c6ac8eed7 100644 (file)
@@ -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;
 }