aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Cunha <tcunha@gmx.com>2012-01-29 12:53:33 +0000
committerTiago Cunha <tcunha@gmx.com>2012-01-29 12:53:33 +0000
commite23df3af5a57d28ba40b14db1ad6d62f0ee99940 (patch)
treea70888bbd92b8586121eeac1a508b9f08cb2a91d
parent9c1d3046cac8b999e0b2be4bc0f126bd889ea1c1 (diff)
downloadrtmux-e23df3af5a57d28ba40b14db1ad6d62f0ee99940.tar.gz
rtmux-e23df3af5a57d28ba40b14db1ad6d62f0ee99940.tar.bz2
rtmux-e23df3af5a57d28ba40b14db1ad6d62f0ee99940.zip
Sync OpenBSD patchset 1014:
Call bufferevent_free before closing file descriptor associated with it or bugs in $EventMechanism on $OtherOS makes libevent get it's knickers in a twist. From Dylan Alex Simon.
-rw-r--r--job.c4
-rw-r--r--server-client.c12
-rw-r--r--server-fn.c2
-rw-r--r--window.c6
4 files changed, 12 insertions, 12 deletions
diff --git a/job.c b/job.c
index 03ee386b..1ec87d99 100644
--- a/job.c
+++ b/job.c
@@ -123,10 +123,10 @@ job_free(struct job *job)
if (job->pid != -1)
kill(job->pid, SIGTERM);
- if (job->fd != -1)
- close(job->fd);
if (job->event != NULL)
bufferevent_free(job->event);
+ if (job->fd != -1)
+ close(job->fd);
xfree(job);
}
diff --git a/server-client.c b/server-client.c
index 61b864b7..6d485ae1 100644
--- a/server-client.c
+++ b/server-client.c
@@ -123,24 +123,24 @@ server_client_lost(struct client *c)
if (c->flags & CLIENT_TERMINAL)
tty_free(&c->tty);
+ if (c->stdin_event != NULL)
+ bufferevent_free(c->stdin_event);
if (c->stdin_fd != -1) {
setblocking(c->stdin_fd, 1);
close(c->stdin_fd);
}
- if (c->stdin_event != NULL)
- bufferevent_free(c->stdin_event);
+ if (c->stdout_event != NULL)
+ bufferevent_free(c->stdout_event);
if (c->stdout_fd != -1) {
setblocking(c->stdout_fd, 1);
close(c->stdout_fd);
}
- if (c->stdout_event != NULL)
- bufferevent_free(c->stdout_event);
+ if (c->stderr_event != NULL)
+ bufferevent_free(c->stderr_event);
if (c->stderr_fd != -1) {
setblocking(c->stderr_fd, 1);
close(c->stderr_fd);
}
- if (c->stderr_event != NULL)
- bufferevent_free(c->stderr_event);
status_free_jobs(&c->status_new);
status_free_jobs(&c->status_old);
diff --git a/server-fn.c b/server-fn.c
index eb54b679..1de34fd1 100644
--- a/server-fn.c
+++ b/server-fn.c
@@ -337,8 +337,8 @@ server_destroy_pane(struct window_pane *wp)
old_fd = wp->fd;
if (wp->fd != -1) {
- close(wp->fd);
bufferevent_free(wp->event);
+ close(wp->fd);
wp->fd = -1;
}
diff --git a/window.c b/window.c
index 97337207..111eb9c1 100644
--- a/window.c
+++ b/window.c
@@ -608,8 +608,8 @@ window_pane_destroy(struct window_pane *wp)
window_pane_reset_mode(wp);
if (wp->fd != -1) {
- close(wp->fd);
bufferevent_free(wp->event);
+ close(wp->fd);
}
input_free(wp);
@@ -619,8 +619,8 @@ window_pane_destroy(struct window_pane *wp)
grid_destroy(wp->saved_grid);
if (wp->pipe_fd != -1) {
- close(wp->pipe_fd);
bufferevent_free(wp->pipe_event);
+ close(wp->pipe_fd);
}
RB_REMOVE(window_pane_tree, &all_window_panes, wp);
@@ -644,8 +644,8 @@ window_pane_spawn(struct window_pane *wp, const char *cmd, const char *shell,
struct termios tio2;
if (wp->fd != -1) {
- close(wp->fd);
bufferevent_free(wp->event);
+ close(wp->fd);
}
if (cmd != NULL) {
if (wp->cmd != NULL)