diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2015-06-20 08:45:19 +0100 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2015-06-20 08:45:19 +0100 |
commit | 8b8a007e8e1faa6af20acdeac728c4fddfeb2f6b (patch) | |
tree | 10612c9842dbdb0749e0840cf057ca4a08a84948 /job.c | |
parent | 8abcea18a24dea24d6049fefa31c877133489092 (diff) | |
parent | 0ef3e28609ba89f53bedf40f5facc990cc57e60d (diff) | |
download | rtmux-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.c | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -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; + } } |