Index: main/asterisk.c =================================================================== --- main/asterisk.c (revision 155803) +++ main/asterisk.c (working copy) @@ -1446,6 +1446,11 @@ * is going to exit */ } +static void __remote_quit_handler(int num) +{ + sig_flags.need_quit = 1; +} + static const char *fix_header(char *outbuf, int maxout, const char *s, char *cmp) { const char *c; @@ -2439,6 +2444,11 @@ char *ebuf; int num = 0; + memset(&sig_flags, 0, sizeof(sig_flags)); + signal(SIGINT, __remote_quit_handler); + signal(SIGTERM, __remote_quit_handler); + signal(SIGHUP, __remote_quit_handler); + if (read(ast_consock, buf, sizeof(buf)) < 0) { ast_log(LOG_ERROR, "read() failed: %s\n", strerror(errno)); return; @@ -2449,6 +2459,9 @@ sprintf(tmp, "%s%s", prefix, data); if (write(ast_consock, tmp, strlen(tmp) + 1) < 0) { ast_log(LOG_ERROR, "write() failed: %s\n", strerror(errno)); + if (sig_flags.need_quit == 1) { + return; + } } } stringp = buf; @@ -2484,6 +2497,10 @@ char buffer[512] = "", *curline = buffer, *nextline; int not_written = 1; + if (sig_flags.need_quit == 1) { + break; + } + if (read(ast_consock, buffer, sizeof(buffer) - 1) <= 0) { break; } @@ -2528,6 +2545,10 @@ for (;;) { ebuf = (char *)el_gets(el, &num); + if (sig_flags.need_quit == 1) { + break; + } + if (!ebuf && write(1, "", 1) < 0) break;