Add a NOBLOCK flag rather than adding amount to wait for when
authornicm <nicm@openbsd.org>
Fri, 10 Dec 2021 12:42:37 +0000 (12:42 +0000)
committernicm <nicm@openbsd.org>
Fri, 10 Dec 2021 12:42:37 +0000 (12:42 +0000)
dealing with potentially-long sequences. GitHub issue 3001.

usr.bin/tmux/tmux.h
usr.bin/tmux/tty.c

index ec0fb68..03853e7 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.1155 2021/11/15 10:58:13 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.1156 2021/12/10 12:42:37 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1311,7 +1311,7 @@ struct tty {
 #define TTY_NOCURSOR 0x1
 #define TTY_FREEZE 0x2
 #define TTY_TIMER 0x4
-/* 0x8 unused */
+#define TTY_NOBLOCK 0x8
 #define TTY_STARTED 0x10
 #define TTY_OPENED 0x20
 /* 0x40 unused */
index f67e9c5..d43097d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.413 2021/12/06 10:08:42 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.414 2021/12/10 12:42:37 nicm Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -206,6 +206,11 @@ tty_block_maybe(struct tty *tty)
        size_t           size = EVBUFFER_LENGTH(tty->out);
        struct timeval   tv = { .tv_usec = TTY_BLOCK_INTERVAL };
 
+       if (size == 0)
+               tty->flags &= ~TTY_NOBLOCK;
+       else if (tty->flags & TTY_NOBLOCK)
+               return (0);
+
        if (size < TTY_BLOCK_START(tty))
                return (0);
 
@@ -2088,8 +2093,8 @@ tty_set_selection(struct tty *tty, const char *buf, size_t len)
        encoded = xmalloc(size);
 
        b64_ntop(buf, len, encoded, size);
+       tty->flags |= TTY_NOBLOCK;
        tty_putcode_ptr2(tty, TTYC_MS, "", encoded);
-       tty->client->redraw = EVBUFFER_LENGTH(tty->out);
 
        free(encoded);
 }
@@ -2097,6 +2102,7 @@ tty_set_selection(struct tty *tty, const char *buf, size_t len)
 void
 tty_cmd_rawstring(struct tty *tty, const struct tty_ctx *ctx)
 {
+       tty->flags |= TTY_NOBLOCK;
        tty_add(tty, ctx->ptr, ctx->num);
        tty_invalidate(tty);
 }