aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2013-03-11 09:46:18 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2013-03-11 09:46:18 +0000
commit412ac6bc3a690628f72101494ac88e91c7d3377c (patch)
treea1b191ce809964d545334f85b5dac9091b5f3884
parenta6ad44f111a42553ad38a850a0e215914ea1f037 (diff)
downloadrtmux-412ac6bc3a690628f72101494ac88e91c7d3377c.tar.gz
rtmux-412ac6bc3a690628f72101494ac88e91c7d3377c.tar.bz2
rtmux-412ac6bc3a690628f72101494ac88e91c7d3377c.zip
Use single stdout and stderr for control clients.
-rw-r--r--server-client.c5
-rw-r--r--server-fn.c4
2 files changed, 8 insertions, 1 deletions
diff --git a/server-client.c b/server-client.c
index b905a7c7..77e6de78 100644
--- a/server-client.c
+++ b/server-client.c
@@ -153,7 +153,8 @@ server_client_lost(struct client *c)
evbuffer_free (c->stdin_data);
evbuffer_free (c->stdout_data);
- evbuffer_free (c->stderr_data);
+ if (c->stderr_data != c->stdout_data)
+ evbuffer_free (c->stderr_data);
status_free_jobs(&c->status_new);
status_free_jobs(&c->status_old);
@@ -955,6 +956,8 @@ server_client_msg_identify(
if (data->flags & IDENTIFY_CONTROL) {
c->stdin_callback = control_callback;
+ evbuffer_free(c->stderr_data);
+ c->stderr_data = c->stdout_data;
c->flags |= CLIENT_CONTROL;
if (data->flags & IDENTIFY_TERMIOS)
evbuffer_add_printf(c->stdout_data, "\033P1000p");
diff --git a/server-fn.c b/server-fn.c
index 4d8a658c..566925f0 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -546,6 +546,10 @@ server_push_stderr(struct client *c)
struct msg_stderr_data data;
size_t size;
+ if (c->stderr_data == c->stdout_data) {
+ server_push_stdout(c);
+ return;
+ }
size = EVBUFFER_LENGTH(c->stderr_data);
if (size == 0)
return;