=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server-client.c,v retrieving revision 1.87 retrieving revision 1.88 diff -c -r1.87 -r1.88 *** src/usr.bin/tmux/server-client.c 2013/03/22 10:31:22 1.87 --- src/usr.bin/tmux/server-client.c 2013/03/22 15:49:55 1.88 *************** *** 1,4 **** ! /* $OpenBSD: server-client.c,v 1.87 2013/03/22 10:31:22 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server-client.c,v 1.88 2013/03/22 15:49:55 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 865,888 **** void server_client_msg_command(struct client *c, struct msg_command_data *data) { ! struct cmd_ctx ctx; struct cmd_list *cmdlist = NULL; int argc; char **argv, *cause; ! ctx.error = server_client_msg_error; ! ctx.print = server_client_msg_print; ! ctx.info = server_client_msg_info; ! ctx.msgdata = data; ! ctx.curclient = NULL; - ctx.cmdclient = c; - argc = data->argc; data->argv[(sizeof data->argv) - 1] = '\0'; if (cmd_unpack_argv(data->argv, sizeof data->argv, argc, &argv) != 0) { ! server_client_msg_error(&ctx, "command too long"); goto error; } --- 865,888 ---- void server_client_msg_command(struct client *c, struct msg_command_data *data) { ! struct cmd_ctx *ctx; struct cmd_list *cmdlist = NULL; int argc; char **argv, *cause; ! ctx = cmd_get_ctx(); ! ctx->msgdata = data; ! ctx->curclient = NULL; ! ctx->cmdclient = c; ! ctx->error = server_client_msg_error; ! ctx->print = server_client_msg_print; ! ctx->info = server_client_msg_info; argc = data->argc; data->argv[(sizeof data->argv) - 1] = '\0'; if (cmd_unpack_argv(data->argv, sizeof data->argv, argc, &argv) != 0) { ! server_client_msg_error(ctx, "command too long"); goto error; } *************** *** 893,905 **** } if ((cmdlist = cmd_list_parse(argc, argv, &cause)) == NULL) { ! server_client_msg_error(&ctx, "%s", cause); cmd_free_argv(argc, argv); goto error; } cmd_free_argv(argc, argv); ! switch (cmd_list_exec(cmdlist, &ctx)) { case CMD_RETURN_ERROR: case CMD_RETURN_NORMAL: --- 893,905 ---- } if ((cmdlist = cmd_list_parse(argc, argv, &cause)) == NULL) { ! server_client_msg_error(ctx, "%s", cause); cmd_free_argv(argc, argv); goto error; } cmd_free_argv(argc, argv); ! switch (cmd_list_exec(cmdlist, ctx)) { case CMD_RETURN_ERROR: case CMD_RETURN_NORMAL: *************** *** 910,920 **** --- 910,923 ---- break; } cmd_list_free(cmdlist); + cmd_free_ctx(ctx); return; error: if (cmdlist != NULL) cmd_list_free(cmdlist); + cmd_free_ctx(ctx); + c->flags |= CLIENT_EXIT; }