Project "FreeSWITCH Source" received a push.

branch: master updated

       via: 2ec2a9b0d335a8d6a30ab5a92448ac3ad63649ff (commit)
      from: 46f6c6e42d2775ccfecb8f445ebbaaf32ab34df7 (commit)


= COMMIT LOG ===========================================================
committer: Anthony Minessale
comments: 
skip blocking writes on fs_cli to avoid backing up event socket

diff --git a/libs/esl/fs_cli.c b/libs/esl/fs_cli.c
index 19e8d7f..a70d63f 100644
--- a/libs/esl/fs_cli.c
+++ b/libs/esl/fs_cli.c
@@ -589,22 +589,36 @@ static void *msg_thread_run(esl_thread_t *me, void *obj)
 
 	while(thread_running && handle->connected) {
 		esl_status_t status = esl_recv_event_timed(handle, 10, 1, NULL);
-
-		if (WARN_STOP) {
-			printf("Type control-D or /exit or /quit or /bye to exit.\n\n");
-			WARN_STOP = 0;
-		}
+		int aok = 1;		
 
 		if (status == ESL_FAIL) {
-			esl_log(ESL_LOG_WARNING, "Disconnected.\n");
+			if (aok) esl_log(ESL_LOG_WARNING, "Disconnected.\n");
 			running = -1; thread_running = 0;
 		} else if (status == ESL_SUCCESS) {
+#ifndef WIN32
+			fd_set can_write;
+			int fd;
+			struct timeval to;
+
+			fd = fileno(stdout);
+			memset(&to, 0, sizeof(to));
+			FD_ZERO(&can_write);
+			FD_SET(fd, &can_write);
+			to.tv_sec = 0;
+			to.tv_usec = 100000;
+			if (select(fd + 1, NULL, &can_write, NULL, &to) > 0) {
+				aok = FD_ISSET(fd, &can_write);
+			} else {
+				aok = 0;
+			}
+#endif
+			
 			if (handle->last_event) {
 				const char *type = esl_event_get_header(handle->last_event, "content-type");
 				int known = 0;
 
 				if (!esl_strlen_zero(type)) {
-					if (!strcasecmp(type, "log/data")) {
+					if (aok && !strcasecmp(type, "log/data")) {
 						const char *userdata = esl_event_get_header(handle->last_event, "user-data");
 						
 						if (esl_strlen_zero(userdata) || esl_strlen_zero(filter_uuid) || !strcasecmp(filter_uuid, userdata)) {
@@ -631,7 +645,7 @@ static void *msg_thread_run(esl_thread_t *me, void *obj)
 					} else if (!strcasecmp(type, "text/disconnect-notice")) {
 						running = -1; thread_running = 0;
 						known++;
-					} else if (!strcasecmp(type, "text/event-plain")) {
+					} else if (aok && !strcasecmp(type, "text/event-plain")) {
 						char *foo;
 						esl_event_serialize(handle->last_ievent, &foo, ESL_FALSE);
 						printf("RECV EVENT\n%s\n", foo);
@@ -641,7 +655,7 @@ static void *msg_thread_run(esl_thread_t *me, void *obj)
 					}
 				}
 				
-				if (!known) {
+				if (aok && !known) {
 					char *foo;
 					printf("INCOMING DATA [%s]\n%s\n", type, handle->last_event->body ? handle->last_event->body : "");
 					esl_event_serialize(handle->last_event, &foo, ESL_FALSE);
@@ -651,6 +665,11 @@ static void *msg_thread_run(esl_thread_t *me, void *obj)
 			}
 		}
 
+		if (WARN_STOP) {
+			if (aok) printf("Type control-D or /exit or /quit or /bye to exit.\n\n");
+			WARN_STOP = 0;
+		}
+
 		usleep(1000);
 	}
 
========================================================================

Summary of changes:
 libs/esl/fs_cli.c |   37 ++++++++++++++++++++++++++++---------
 1 files changed, 28 insertions(+), 9 deletions(-)

this email was generated because of /git/your-repo.git/hooks/post-receive by the file /git-core/contrib/hooks/post-receive-email
For more info, see http://blog.chomperstomp.com/?p=630 --
FreeSWITCH Source