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]remo...@partners.org>
> >    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]nicholas.marri...@gmail.com> 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]nicholas.marri...@gmail.com> 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]tmux-us...@lists.sourceforge.net
> >      >>>>>> [5][7]https://lists.sourceforge.net/lists/listinfo/tmux-users
> >      >>>>>
> >      >>>>> References
> >      >>>>>
> >      >>>>> *Visible links
> >      >>>>> *1. mailto:[8]nicholas.marri...@gmail.com
> >      >>>>> *2. [9]http://sprint.com/first
> >      >>>>> *3. [10]http://p.sf.net/sfu/sprint-com-first
> >      >>>>> *4. mailto:[11]tmux-us...@lists.sourceforge.net
> >      >>>>> *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]tmux-us...@lists.sourceforge.net
> >      >>> [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:remo...@partners.org
> >    2. mailto:nicholas.marri...@gmail.com
> >    3. mailto:nicholas.marri...@gmail.com
> >    4. http://sprint.com/first
> >    5. http://p.sf.net/sfu/sprint-com-first
> >    6. mailto:tmux-users@lists.sourceforge.net
> >    7. https://lists.sourceforge.net/lists/listinfo/tmux-users
> >    8. mailto:nicholas.marri...@gmail.com
> >    9. http://sprint.com/first
> >   10. http://p.sf.net/sfu/sprint-com-first
> >   11. mailto:tmux-users@lists.sourceforge.net
> >   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:tmux-users@lists.sourceforge.net
> >   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
> tmux-users@lists.sourceforge.net
> 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
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to