aboutsummaryrefslogtreecommitdiff
path: root/job.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2015-06-20 08:45:19 +0100
committerNicholas Marriott <nicholas.marriott@gmail.com>2015-06-20 08:45:19 +0100
commit8b8a007e8e1faa6af20acdeac728c4fddfeb2f6b (patch)
tree10612c9842dbdb0749e0840cf057ca4a08a84948 /job.c
parent8abcea18a24dea24d6049fefa31c877133489092 (diff)
parent0ef3e28609ba89f53bedf40f5facc990cc57e60d (diff)
downloadrtmux-8b8a007e8e1faa6af20acdeac728c4fddfeb2f6b.tar.gz
rtmux-8b8a007e8e1faa6af20acdeac728c4fddfeb2f6b.tar.bz2
rtmux-8b8a007e8e1faa6af20acdeac728c4fddfeb2f6b.zip
Merge branch 'master' of github.com:tmux/tmux
Diffstat (limited to 'job.c')
-rw-r--r--job.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/job.c b/job.c
index 74b316ed..ff21b3b6 100644
--- a/job.c
+++ b/job.c
@@ -99,6 +99,8 @@ job_run(const char *cmd, struct session *s, int cwd,
close(out[1]);
job = xmalloc(sizeof *job);
+ job->state = JOB_RUNNING;
+
job->cmd = xstrdup(cmd);
job->pid = pid;
job->status = 0;
@@ -166,14 +168,13 @@ job_callback(unused struct bufferevent *bufev, unused short events, void *data)
log_debug("job error %p: %s, pid %ld", job, job->cmd, (long) job->pid);
- if (job->pid == -1) {
+ if (job->state == JOB_DEAD) {
if (job->callbackfn != NULL)
job->callbackfn(job);
job_free(job);
} else {
bufferevent_disable(job->event, EV_READ);
- close(job->fd);
- job->fd = -1;
+ job->state = JOB_CLOSED;
}
}
@@ -185,10 +186,12 @@ job_died(struct job *job, int status)
job->status = status;
- if (job->fd == -1) {
+ if (job->state == JOB_CLOSED) {
if (job->callbackfn != NULL)
job->callbackfn(job);
job_free(job);
- } else
+ } else {
job->pid = -1;
+ job->state = JOB_DEAD;
+ }
}