diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2010-12-20 00:03:55 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2010-12-20 00:03:55 +0000 |
commit | a51dcdc430150b688d56ec35e8c96ce6f978f68b (patch) | |
tree | f006980fa330e0dd844d56d142a80993ef60ac3e /cmd-load-buffer.c | |
parent | c65d4220f019b8022ae0192d4a9014be5cc08f40 (diff) | |
download | rtmux-a51dcdc430150b688d56ec35e8c96ce6f978f68b.tar.gz rtmux-a51dcdc430150b688d56ec35e8c96ce6f978f68b.tar.bz2 rtmux-a51dcdc430150b688d56ec35e8c96ce6f978f68b.zip |
Unify the way sessions are used by callbacks - store the address and use
the reference count, then check it is still on the global sessions list
in the callback.
Diffstat (limited to 'cmd-load-buffer.c')
-rw-r--r-- | cmd-load-buffer.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index e28b9c74..abaa76ca 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -81,6 +81,7 @@ cmd_load_buffer_exec(struct cmd *self, struct cmd_ctx *ctx) cdata = xmalloc(sizeof *cdata); cdata->session = s; + cdata->session->references++; cdata->buffer = data->buffer; c->stdin_data = cdata; c->stdin_callback = cmd_load_buffer_callback; @@ -144,7 +145,6 @@ cmd_load_buffer_callback(struct client *c, void *data) char *pdata; size_t psize; u_int limit; - int idx; /* * Event callback has already checked client is not dead and reduced @@ -153,7 +153,7 @@ cmd_load_buffer_callback(struct client *c, void *data) c->flags |= CLIENT_EXIT; /* Does the target session still exist? */ - if (session_index(s, &idx) != 0) + if (!session_alive(s)) goto out; psize = EVBUFFER_LENGTH(c->stdin_event->input); @@ -180,5 +180,6 @@ cmd_load_buffer_callback(struct client *c, void *data) } out: + cdata->session->references--; xfree(cdata); } |