=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-if-shell.c,v retrieving revision 1.17 retrieving revision 1.18 diff -c -r1.17 -r1.18 *** src/usr.bin/tmux/cmd-if-shell.c 2012/08/11 07:32:16 1.17 --- src/usr.bin/tmux/cmd-if-shell.c 2013/03/22 15:49:55 1.18 *************** *** 1,4 **** ! /* $OpenBSD: cmd-if-shell.c,v 1.17 2012/08/11 07:32:16 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha --- 1,4 ---- ! /* $OpenBSD: cmd-if-shell.c,v 1.18 2013/03/22 15:49:55 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha *************** *** 47,53 **** struct cmd_if_shell_data { char *cmd_if; char *cmd_else; ! struct cmd_ctx ctx; }; enum cmd_retval --- 47,53 ---- struct cmd_if_shell_data { char *cmd_if; char *cmd_else; ! struct cmd_ctx *ctx; }; enum cmd_retval *************** *** 63,74 **** cdata->cmd_else = xstrdup(args->argv[2]); else cdata->cmd_else = NULL; - memcpy(&cdata->ctx, ctx, sizeof cdata->ctx); ! if (ctx->cmdclient != NULL) ! ctx->cmdclient->references++; ! if (ctx->curclient != NULL) ! ctx->curclient->references++; job_run(shellcmd, cmd_if_shell_callback, cmd_if_shell_free, cdata); --- 63,71 ---- cdata->cmd_else = xstrdup(args->argv[2]); else cdata->cmd_else = NULL; ! cdata->ctx = ctx; ! cmd_ref_ctx(ctx); job_run(shellcmd, cmd_if_shell_callback, cmd_if_shell_free, cdata); *************** *** 79,85 **** cmd_if_shell_callback(struct job *job) { struct cmd_if_shell_data *cdata = job->data; ! struct cmd_ctx *ctx = &cdata->ctx; struct cmd_list *cmdlist; char *cause, *cmd; --- 76,82 ---- cmd_if_shell_callback(struct job *job) { struct cmd_if_shell_data *cdata = job->data; ! struct cmd_ctx *ctx = cdata->ctx; struct cmd_list *cmdlist; char *cause, *cmd; *************** *** 105,118 **** cmd_if_shell_free(void *data) { struct cmd_if_shell_data *cdata = data; ! struct cmd_ctx *ctx = &cdata->ctx; ! if (ctx->cmdclient != NULL) { ! ctx->cmdclient->references--; ctx->cmdclient->flags |= CLIENT_EXIT; ! } ! if (ctx->curclient != NULL) ! ctx->curclient->references--; free(cdata->cmd_else); free(cdata->cmd_if); --- 102,112 ---- cmd_if_shell_free(void *data) { struct cmd_if_shell_data *cdata = data; ! struct cmd_ctx *ctx = cdata->ctx; ! if (ctx->cmdclient != NULL) ctx->cmdclient->flags |= CLIENT_EXIT; ! cmd_free_ctx(ctx); free(cdata->cmd_else); free(cdata->cmd_if);