Sync OpenBSD patchset 648:

copy mode uses the real screen as backing and if it is updated while copying,
strange things can happen. So, freeze reading from the pty while in copy mode.
This commit is contained in:
Tiago Cunha 2010-02-26 13:26:44 +00:00
parent b4c2710bf7
commit ecac081a55
3 changed files with 13 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $Id: server-window.c,v 1.13 2009-12-04 22:14:47 tcunha Exp $ */
/* $Id: server-window.c,v 1.14 2010-02-26 13:26:44 tcunha Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@ -69,7 +69,9 @@ server_window_loop(void)
continue;
TAILQ_FOREACH(wp, &w->panes, entry) {
if (wp->fd != -1) {
if (wp->fd == -1)
continue;
if (!(wp->flags & PANE_FREEZE)) {
if (server_window_backoff(wp))
bufferevent_disable(wp->event, EV_READ);
else

3
tmux.h
View File

@ -1,4 +1,4 @@
/* $Id: tmux.h,v 1.545 2010-02-18 12:35:16 tcunha Exp $ */
/* $Id: tmux.h,v 1.546 2010-02-26 13:26:44 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -786,6 +786,7 @@ struct window_pane {
int flags;
#define PANE_REDRAW 0x1
#define PANE_FREEZE 0x2
char *cmd;
char *shell;

View File

@ -1,4 +1,4 @@
/* $Id: window-copy.c,v 1.104 2010-02-18 12:38:24 tcunha Exp $ */
/* $Id: window-copy.c,v 1.105 2010-02-26 13:26:44 tcunha Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -138,6 +138,9 @@ window_copy_init(struct window_pane *wp)
data->searchtype = WINDOW_COPY_OFF;
data->searchstr = NULL;
wp->flags |= PANE_FREEZE;
bufferevent_disable(wp->event, EV_READ|EV_WRITE);
s = &data->screen;
screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0);
if (options_get_number(&wp->window->options, "mode-mouse"))
@ -166,6 +169,9 @@ window_copy_free(struct window_pane *wp)
{
struct window_copy_mode_data *data = wp->modedata;
wp->flags &= ~PANE_FREEZE;
bufferevent_enable(wp->event, EV_READ|EV_WRITE);
if (data->searchstr != NULL)
xfree(data->searchstr);
xfree(data->inputstr);