[asterisk-commits] tilghman: branch 1.6.1 r163386 - in /branches/1.6.1: ./ main/asterisk.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Dec 11 17:48:49 CST 2008


Author: tilghman
Date: Thu Dec 11 17:48:48 2008
New Revision: 163386

URL: http://svn.digium.com/view/asterisk?view=rev&rev=163386
Log:
Merged revisions 163384 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
  r163384 | tilghman | 2008-12-11 17:38:56 -0600 (Thu, 11 Dec 2008) | 16 lines
  
  Merged revisions 163383 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.4
  
  ........
    r163383 | tilghman | 2008-12-11 17:35:55 -0600 (Thu, 11 Dec 2008) | 9 lines
    
    When a Ctrl-C or Ctrl-D ends a remote console, on certain shells, the terminal
    is messed up.  By intercepting those events with a signal handler in the remote
    console, we can avoid those issues.
    (closes issue #13464)
     Reported by: tzafrir
     Patches: 
           20081110__bug13464.diff.txt uploaded by Corydon76 (license 14)
     Tested by: blitzrage
  ........
................

Modified:
    branches/1.6.1/   (props changed)
    branches/1.6.1/main/asterisk.c

Propchange: branches/1.6.1/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.1/main/asterisk.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.1/main/asterisk.c?view=diff&rev=163386&r1=163385&r2=163386
==============================================================================
--- branches/1.6.1/main/asterisk.c (original)
+++ branches/1.6.1/main/asterisk.c Thu Dec 11 17:48:48 2008
@@ -1449,6 +1449,11 @@
 	}
 	/* There is no need to restore the signal handler here, since the app
 	 * 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)
@@ -2443,6 +2448,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;
@@ -2453,6 +2463,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;
@@ -2499,6 +2512,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;
 			}
@@ -2529,6 +2546,10 @@
 	}
 	for (;;) {
 		ebuf = (char *)el_gets(el, &num);
+
+		if (sig_flags.need_quit == 1) {
+			break;
+		}
 
 		if (!ebuf && write(1, "", 1) < 0)
 			break;




More information about the asterisk-commits mailing list