don't bother with this, there is a better one coming soon
On Thu, Jul 22, 2010 at 11:15:09PM +0100, Nicholas Marriott wrote:
> Anyone seeing this or not seeing it please try this and let me know of
> any strangeness
>
>
> Index: server-client.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/tmux/server-client.c,v
> retrieving revision 1.35
> diff -u -p -r1.35 server-client.c
> --- server-client.c 19 Jul 2010 18:27:38 -0000 1.35
> +++ server-client.c 22 Jul 2010 22:14:06 -0000
> @@ -29,6 +29,7 @@
>
> void server_client_handle_key(int, struct mouse_event *, void *);
> void server_client_repeat_timer(int, short, void *);
> +void server_client_check_backoff(struct client *);
> void server_client_check_redraw(struct client *);
> void server_client_set_title(struct client *);
> void server_client_reset_state(struct client *);
> @@ -393,6 +394,7 @@ server_client_loop(void)
> if (c == NULL || c->session == NULL)
> continue;
>
> + server_client_check_backoff(c);
> server_client_check_redraw(c);
> server_client_reset_state(c);
> }
> @@ -455,6 +457,18 @@ server_client_repeat_timer(unused int fd
>
> if (c->flags & CLIENT_REPEAT)
> c->flags &= ~(CLIENT_PREFIX|CLIENT_REPEAT);
> +}
> +
> +/* Check client backoff. */
> +void
> +server_client_check_backoff(struct client *c)
> +{
> + struct tty *tty = &c->tty;
> +
> + if (tty_backoff(tty)) {
> + tty_invalidate(tty);
> + server_redraw_client(c);
> + }
> }
>
> /* Check for client redraws. */
> Index: server-window.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/tmux/server-window.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 server-window.c
> --- server-window.c 19 Jul 2010 21:13:03 -0000 1.16
> +++ server-window.c 22 Jul 2010 22:14:06 -0000
> @@ -29,31 +29,6 @@ int server_window_check_activity(struct
> int server_window_check_content(
> struct session *, struct winlink *, struct window_pane *);
>
> -/* Check if this window should suspend reading. */
> -int
> -server_window_backoff(struct window_pane *wp)
> -{
> - struct client *c;
> - u_int i;
> -
> - if (!window_pane_visible(wp))
> - return (0);
> -
> - for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
> - c = ARRAY_ITEM(&clients, i);
> - if (c == NULL || c->session == NULL)
> - continue;
> - if ((c->flags & (CLIENT_SUSPENDED|CLIENT_DEAD)) != 0)
> - continue;
> - if (c->session->curw->window != wp->window)
> - continue;
> -
> - if (EVBUFFER_LENGTH(c->tty.event->output) > BACKOFF_THRESHOLD)
> - return (1);
> - }
> - return (0);
> -}
> -
> /* Window functions that need to happen every loop. */
> void
> server_window_loop(void)
> @@ -68,17 +43,6 @@ server_window_loop(void)
> w = ARRAY_ITEM(&windows, i);
> if (w == NULL)
> continue;
> -
> - TAILQ_FOREACH(wp, &w->panes, entry) {
> - if (wp->fd == -1)
> - continue;
> - if (!(wp->flags & PANE_FREEZE)) {
> - if (server_window_backoff(wp))
> - bufferevent_disable(wp->event, EV_READ);
> - else
> - bufferevent_enable(wp->event, EV_READ);
> - }
> - }
>
> for (j = 0; j < ARRAY_LENGTH(&sessions); j++) {
> s = ARRAY_ITEM(&sessions, j);
> Index: tmux.h
> ===================================================================
> RCS file: /cvs/src/usr.bin/tmux/tmux.h,v
> retrieving revision 1.235
> diff -u -p -r1.235 tmux.h
> --- tmux.h 14 Jul 2010 18:37:49 -0000 1.235
> +++ tmux.h 22 Jul 2010 22:14:08 -0000
> @@ -59,8 +59,8 @@ extern char **environ;
> /* Automatic name refresh interval, in milliseconds. */
> #define NAME_INTERVAL 500
>
> -/* Maximum data to buffer for output before suspending reading from panes. */
> -#define BACKOFF_THRESHOLD 1024
> +/* Maximum data to buffer for output before suspending writing to a tty. */
> +#define BACKOFF_THRESHOLD 8192
>
> /*
> * Maximum sizes of strings in message data. Don't forget to bump
> @@ -1017,6 +1017,7 @@ struct tty {
> #define TTY_UTF8 0x8
> #define TTY_STARTED 0x10
> #define TTY_OPENED 0x20
> +#define TTY_BACKOFF 0x40
> int flags;
>
> int term_flags;
> @@ -1376,6 +1377,7 @@ void tty_putc(struct tty *, u_char);
> void tty_pututf8(struct tty *, const struct grid_utf8 *);
> void tty_init(struct tty *, int, char *);
> int tty_resize(struct tty *);
> +void tty_invalidate(struct tty *);
> void tty_start_tty(struct tty *);
> void tty_stop_tty(struct tty *);
> void tty_set_title(struct tty *, const char *);
> @@ -1384,6 +1386,7 @@ void tty_draw_line(struct tty *, struct
> int tty_open(struct tty *, const char *, char **);
> void tty_close(struct tty *);
> void tty_free(struct tty *);
> +int tty_backoff(struct tty *);
> void tty_write(void (*)(
> struct tty *, const struct tty_ctx *), const struct tty_ctx *);
> void tty_cmd_alignmenttest(struct tty *, const struct tty_ctx *);
> Index: tty.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/tmux/tty.c,v
> retrieving revision 1.88
> diff -u -p -r1.88 tty.c
> --- tty.c 5 Jun 2010 16:47:11 -0000 1.88
> +++ tty.c 22 Jul 2010 22:14:08 -0000
> @@ -95,6 +95,15 @@ tty_resize(struct tty *tty)
> tty->sx = sx;
> tty->sy = sy;
>
> + tty_invalidate(tty);
> +
> + return (1);
> +}
> +
> +/* Invalidate any cached position data. */
> +void
> +tty_invalidate(struct tty *tty)
> +{
> tty->cx = UINT_MAX;
> tty->cy = UINT_MAX;
>
> @@ -109,8 +118,6 @@ tty_resize(struct tty *tty)
> tty_cursor(tty, 0, 0);
> tty_region(tty, 0, tty->sy - 1);
> }
> -
> - return (1);
> }
>
> int
> @@ -208,11 +215,7 @@ tty_start_tty(struct tty *tty)
> if (tty_term_has(tty->term, TTYC_KMOUS))
> tty_puts(tty, "\033[?1000l");
>
> - tty->cx = UINT_MAX;
> - tty->cy = UINT_MAX;
> -
> - tty->rlower = UINT_MAX;
> - tty->rupper = UINT_MAX;
> + tty_invalidate(tty);
>
> tty->mode = MODE_CURSOR;
>
> @@ -257,6 +260,28 @@ tty_stop_tty(struct tty *tty)
> fcntl(tty->fd, F_SETFL, mode & ~O_NONBLOCK);
> }
>
> +/*
> + * Check if the backoff state has changed on this tty. Returns 1 if the tty
> has
> + * changed state so it is no longer restricted. Backoff is only enforced when
> + * going through tty_write (updates from the windows), internal redraw goes
> + * directly to the output buffer.
> + */
> +int
> +tty_backoff(struct tty *tty)
> +{
> + if (tty->flags & TTY_BACKOFF) {
> + if (EVBUFFER_LENGTH(tty->event->output) != 0)
> + return (0);
> + tty->flags &= ~TTY_BACKOFF;
> + return (1);
> + } else {
> + if (EVBUFFER_LENGTH(tty->event->output) <= BACKOFF_THRESHOLD)
> + return (0);
> + tty->flags |= TTY_BACKOFF;
> + return (0);
> + }
> +}
> +
> void
> tty_fill_acs(struct tty *tty)
> {
> @@ -578,7 +603,9 @@ tty_write(void (*cmdfn)(
> continue;
>
> if (c->session->curw->window == wp->window) {
> - if (c->tty.flags & TTY_FREEZE || c->tty.term == NULL)
> + if (c->tty.term == NULL)
> + continue;
> + if (c->tty.flags & (TTY_FREEZE|TTY_BACKOFF))
> continue;
> cmdfn(&c->tty, ctx);
> }
>
>
>
> On Thu, Jul 22, 2010 at 09:20:13AM +0100, Nicholas Marriott wrote:
> > yes, this is a known problem when a stale client is left behind, it used
> > to happen because we did not pick up HUP, but we do now
> >
> > micahcowan and i started discussing this as a potential problem with ssh
> > before, because ssh will not know to disconnect the client (tcp will not
> > tell it), so tmux will never know either, but we were both called away
> > and didn't finish the conversation
> >
> > probably what is happening is that ssh or the pty buffers fill and it is
> > no longer reading from the pty so it hits the backoff limit and reading
> > from any windows shown on that client is suspended
> >
> > maybe we are doing backoff the wrong way. maybe a better way would be to
> > suspend /writing/ to the client until the buffer drains, then flush the
> > pending data and force a redraw. this might be harder to achieve though
> >
> >
> > On Wed, Jul 21, 2010 at 09:54:53PM -0400, Samer Atiani wrote:
> > > The problem has happened to me again, but I was able to fix it after it
> > > occured.
> > > I typed "C-b : lsc" *and it returned this:
> > > /dev/pts/4: 0 [208x62 xterm] * * * * * * * * * * * * * * * * * * * * *
> > > * *
> > > * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
> > > * *
> > > * * * * * * * * * * * * * * * * * * * * * * * * * * * [0/2]
> > > /dev/pts/5: 0 [208x62 xterm]
> > > so I detached and from the terminal I typed:
> > > tmux detach -t /dev/pts/4
> > > so that the result of the statement "tmux list-clients" is nothing.
> > > Then I
> > > attached again with tmux attach and all was fixed.
> > > Now onto finding what was using /dev/pts/4:
> > > $ ls -al | grep ssh
> > > ... [output redacted]
> > > 5 S satiani * 1943 *1874 *0 *80 * 0 - 19735 poll_s 15:03 ? * * *
> > > *00:00:00
> > > sshd: sati...@pts/4
> > > ...*[output redacted]
> > > 5 S satiani *26350 26286 *0 *80 * 0 - 19735 poll_s 21:35 ? * * *
> > > *00:00:00
> > > sshd: sati...@pts/5
> > > ...*[output redacted]
> > > So it looks like there is a stale ssh connection to the machine
> > > (process
> > > 1943) that was never closed properly after my connection died. Since I
> > > was
> > > still attached to tmux at the time my connection died I think thats
> > > what
> > > caused it. Indeed, I was able to reproduce the problem:
> > > Reproduction steps:
> > > On Windows XP:
> > > 1- Open a VPN connection to the network hosting the target machine.
> > > 2- PuTTY to the machine, open a new tmux session.
> > > 3- Without closing PuTTY or tmux, disconnect the VPN connection.
> > > 4- Reopen the VPN and reconnect to the machine, check your ssh
> > > connection
> > > processes and confirm that there is a stale connection from your
> > > interrupted session.
> > > 5- Attach tmux. At first it appears you can type a few keystrokes, but
> > > eventually the windows will freeze. You should still be able to use
> > > tmux
> > > keybindings to execute tmux commands but the windows themselves won't
> > > respond to your keystrokes unless you switch to another window and then
> > > back to the original window.
> > > I can reliably reproduce this problem using the steps outlined above.
> > > You
> > > can fix the problem either by issuing a tmux detach on the pts of the
> > > stale connection or from outside tmux by killing the stale connection.
> > > Samer
> > > On Wed, Jul 21, 2010 at 3:59 PM, Richard Morse
> > > <[1][email protected]>
> > > wrote:
> > >
> > > This is tmux running locally.
> > >
> > > Ricky
> > > On Jul 21, 2010, at 3:58 PM, Nicholas Marriott wrote:
> > >
> > > > over ssh or running natively?
> > > >
> > > > sounds like problems with SIGWINCH or TIOCGWINSZ
> > > >
> > > >
> > > > On Wed, Jul 21, 2010 at 03:55:35PM -0400, Richard Morse wrote:
> > > >> Is it related to changing the terminal size (ie, the PuTTY window
> > > size) too quickly? I've just discovered that quickly changing the
> > > size
> > > of the Terminal.app window can sometimes cause tmux to stop updating
> > > the
> > > screen until the window is sized back to the size it had been...
> > > >>
> > > >> Ricky
> > > >>
> > > >> On Jul 21, 2010, at 3:17 PM, Samer Atiani wrote:
> > > >>
> > > >>> Yes, its 1.4.14b , sorry.
> > > >>>
> > > >>> As I said I can't reproduce it, so I don't know exactly the
> > > sequence
> > > of
> > > >>> events that leads to this behavior, nor do I have this problem
> > > happening to
> > > >>> me now so I can answer your other questions.
> > > >>>
> > > >>> However, I'll keep you posted the next time it happens.
> > > >>>
> > > >>> Many thanks for your help,
> > > >>> Samer
> > > >>>
> > > >>> On Wed, Jul 21, 2010 at 3:13 PM, Nicholas Marriott <
> > > >>> [2][email protected]> wrote:
> > > >>>
> > > >>>> I take it that is 1.4.14b libevent.
> > > >>>>
> > > >>>> So are you doing anything particular when it happens? Running
> > > any
> > > >>>> particular program?
> > > >>>>
> > > >>>> After it freezes, can you still detach tmux? What does "C-b :
> > > lsc"
> > > say
> > > >>>> after it happens? Does C-b r fix it?
> > > >>>>
> > > >>>>
> > > >>>> On Wed, Jul 21, 2010 at 03:10:49PM -0400, Samer Atiani wrote:
> > > >>>>> *libevent version: 1.4.1b-stable
> > > >>>>> *tmux version: 1.2
> > > >>>>> *platform: ubuntu 9.10, debian squeeze
> > > >>>>> *TERM inside tmux: screen
> > > >>>>> *TERM outside tmux: xterm
> > > >>>>>
> > > >>>>> *On Wed, Jul 21, 2010 at 2:59 PM, Nicholas Marriott
> > > >>>>> *<[1][3][email protected]> wrote:
> > > >>>>>
> > > >>>>> * *What tmux version, what platform is it running on, what is
> > > TERM
> > > set
> > > >>>> to
> > > >>>>> * *inside and outside tmux, what version of libevent?
> > > >>>>>
> > > >>>>> * *On Wed, Jul 21, 2010 at 02:46:26PM -0400, Samer Atiani
> > > wrote:
> > > >>>>>> * *Hello,
> > > >>>>>> * *I'm having a weird problem were tmux windows stop reacting
> > > to
> > > >>>> my
> > > >>>>>> * *keystrokes interactively, this problem only happens to me
> > > in
> > > >>>> PuTTY.
> > > >>>>>> * *When the problem happens, tmux bindings still work (I can
> > > >>>> switch
> > > >>>>> * *between
> > > >>>>>> * *windows, go into command/copy mode, etc.), however, when I
> > > type
> > > >>>>> * *something
> > > >>>>>> * *into the window the terminal doesn't respond to my
> > > keystrokes.
> > > >>>>> * *Whats
> > > >>>>>> * *interesting is that if I switch to another window and then
> > > back
> > > >>>>> * *into the
> > > >>>>>> * *original window, *whatever I originally typed before
> > > switching
> > > >>>> will
> > > >>>>> * *be
> > > >>>>>> * *visible now.
> > > >>>>>> * *I do not know how to reproduce this problem, so far it
> > > happens
> > > >>>>>> * *sporadically (it has happened to me twice today so far).
> > > >>>>>> * *Can you please help me with resolving this problem?
> > > >>>>>> * *Samer
> > > >>>>>
> > > >>>>>>
> > > >>>>>
> > > >>>>
> > >
> > > ------------------------------------------------------------------------------
> > > >>>>>> This SF.net email is sponsored by Sprint
> > > >>>>>> What will you do first with EVO, the first 4G phone?
> > > >>>>>> Visit [2][4]sprint.com/first -- [3]
> > > >>>> [5]http://p.sf.net/sfu/sprint-com-first
> > > >>>>>
> > > >>>>>> _______________________________________________
> > > >>>>>> tmux-users mailing list
> > > >>>>>> [4][6][email protected]
> > > >>>>>> [5][7]https://lists.sourceforge.net/lists/listinfo/tmux-users
> > > >>>>>
> > > >>>>> References
> > > >>>>>
> > > >>>>> *Visible links
> > > >>>>> *1. mailto:[8][email protected]
> > > >>>>> *2. [9]http://sprint.com/first
> > > >>>>> *3. [10]http://p.sf.net/sfu/sprint-com-first
> > > >>>>> *4. mailto:[11][email protected]
> > > >>>>> *5. [12]https://lists.sourceforge.net/lists/listinfo/tmux-users
> > > >>>>
> > > >>>
> > >
> > > ------------------------------------------------------------------------------
> > > >>> This SF.net email is sponsored by Sprint
> > > >>> What will you do first with EVO, the first 4G phone?
> > > >>> Visit [13]sprint.com/first --
> > >
> > > [14]http://p.sf.net/sfu/sprint-com-first_______________________________________________
> > > >>> tmux-users mailing list
> > > >>> [15][email protected]
> > > >>> [16]https://lists.sourceforge.net/lists/listinfo/tmux-users
> > > >>
> > > >>
> > > >>
> > > >> The information in this e-mail is intended only for the person to
> > > whom it is
> > > >> addressed. If you believe this e-mail was sent to you in error and
> > > the e-mail
> > > >> contains patient information, please contact the Partners
> > > Compliance
> > > HelpLine at
> > > >> [17]http://www.partners.org/complianceline . If the e-mail was
> > > sent
> > > to you in error
> > > >> but does not contain patient information, please contact the
> > > sender
> > > and properly
> > > >> dispose of the e-mail.
> > > >>
> > >
> > > References
> > >
> > > Visible links
> > > 1. mailto:[email protected]
> > > 2. mailto:[email protected]
> > > 3. mailto:[email protected]
> > > 4. http://sprint.com/first
> > > 5. http://p.sf.net/sfu/sprint-com-first
> > > 6. mailto:[email protected]
> > > 7. https://lists.sourceforge.net/lists/listinfo/tmux-users
> > > 8. mailto:[email protected]
> > > 9. http://sprint.com/first
> > > 10. http://p.sf.net/sfu/sprint-com-first
> > > 11. mailto:[email protected]
> > > 12. https://lists.sourceforge.net/lists/listinfo/tmux-users
> > > 13. http://sprint.com/first
> > > 14.
> > > http://p.sf.net/sfu/sprint-com-first_______________________________________________
> > > 15. mailto:[email protected]
> > > 16. https://lists.sourceforge.net/lists/listinfo/tmux-users
> > > 17. http://www.partners.org/complianceline
> >
> > ------------------------------------------------------------------------------
> > This SF.net email is sponsored by Sprint
> > What will you do first with EVO, the first 4G phone?
> > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> > _______________________________________________
> > tmux-users mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/tmux-users
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Sprint
> What will you do first with EVO, the first 4G phone?
> Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
> _______________________________________________
> tmux-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/tmux-users
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
tmux-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users