Sync OpenBSD patchset 313:

Fix a race condition when asking a client to take over the terminal (switching
to a different poll loop):

If a MSG_READY was followed very quickly by a MSG_EXIT (for example if doing
"tmux new 'exit'"), both messages could be read as part of the same imsg_read
in the first client poll loop. The MSG_READY would then cause a switch to the
second client loop, which would immediately call poll(2) again, causing the
client to hang forever waiting for an exit message that it already had.

Change to call imsg_get to process any existing messages before polling.

1 file changed
tree: 246556fdd31fa129da84b3a92393ad9c72c3988f
  1. CHANGES
  2. FAQ
  3. GNUmakefile
  4. Makefile
  5. NOTES
  6. TODO
  7. array.h
  8. attributes.c
  9. buffer-poll.c
  10. buffer.c
  11. cfg.c
  12. client-fn.c
  13. client.c
  14. clock.c
  15. cmd-attach-session.c
  16. cmd-bind-key.c
  17. cmd-break-pane.c
  18. cmd-choose-client.c
  19. cmd-choose-session.c
  20. cmd-choose-window.c
  21. cmd-clear-history.c
  22. cmd-clock-mode.c
  23. cmd-command-prompt.c
  24. cmd-confirm-before.c
  25. cmd-copy-buffer.c
  26. cmd-copy-mode.c
  27. cmd-delete-buffer.c
  28. cmd-detach-client.c
  29. cmd-display-message.c
  30. cmd-display-panes.c
  31. cmd-down-pane.c
  32. cmd-find-window.c
  33. cmd-generic.c
  34. cmd-has-session.c
  35. cmd-if-shell.c
  36. cmd-kill-pane.c
  37. cmd-kill-server.c
  38. cmd-kill-session.c
  39. cmd-kill-window.c
  40. cmd-last-window.c
  41. cmd-link-window.c
  42. cmd-list-buffers.c
  43. cmd-list-clients.c
  44. cmd-list-commands.c
  45. cmd-list-keys.c
  46. cmd-list-sessions.c
  47. cmd-list-windows.c
  48. cmd-list.c
  49. cmd-load-buffer.c
  50. cmd-lock-server.c
  51. cmd-move-window.c
  52. cmd-new-session.c
  53. cmd-new-window.c
  54. cmd-next-layout.c
  55. cmd-next-window.c
  56. cmd-paste-buffer.c
  57. cmd-previous-layout.c
  58. cmd-previous-window.c
  59. cmd-refresh-client.c
  60. cmd-rename-session.c
  61. cmd-rename-window.c
  62. cmd-resize-pane.c
  63. cmd-respawn-window.c
  64. cmd-rotate-window.c
  65. cmd-save-buffer.c
  66. cmd-scroll-mode.c
  67. cmd-select-layout.c
  68. cmd-select-pane.c
  69. cmd-select-prompt.c
  70. cmd-select-window.c
  71. cmd-send-keys.c
  72. cmd-send-prefix.c
  73. cmd-server-info.c
  74. cmd-set-buffer.c
  75. cmd-set-environment.c
  76. cmd-set-option.c
  77. cmd-set-password.c
  78. cmd-set-window-option.c
  79. cmd-show-buffer.c
  80. cmd-show-environment.c
  81. cmd-show-options.c
  82. cmd-show-window-options.c
  83. cmd-source-file.c
  84. cmd-split-window.c
  85. cmd-start-server.c
  86. cmd-string.c
  87. cmd-suspend-client.c
  88. cmd-swap-pane.c
  89. cmd-swap-window.c
  90. cmd-switch-client.c
  91. cmd-unbind-key.c
  92. cmd-unlink-window.c
  93. cmd-up-pane.c
  94. cmd.c
  95. colour.c
  96. compat.h
  97. compat/
  98. configure
  99. environ.c
  100. examples/
  101. grid-view.c
  102. grid.c
  103. input-keys.c
  104. input.c
  105. key-bindings.c
  106. key-string.c
  107. layout-set.c
  108. layout.c
  109. log.c
  110. mode-key.c
  111. names.c
  112. options-cmd.c
  113. options.c
  114. osdep-darwin.c
  115. osdep-freebsd.c
  116. osdep-linux.c
  117. osdep-netbsd.c
  118. osdep-openbsd.c
  119. osdep-unknown.c
  120. paste.c
  121. resize.c
  122. screen-redraw.c
  123. screen-write.c
  124. screen.c
  125. server-fn.c
  126. server-msg.c
  127. server.c
  128. session.c
  129. status.c
  130. tmux.1
  131. tmux.c
  132. tmux.h
  133. tools/
  134. tty-keys.c
  135. tty-term.c
  136. tty.c
  137. utf8.c
  138. window-choose.c
  139. window-clock.c
  140. window-copy.c
  141. window-more.c
  142. window-scroll.c
  143. window.c
  144. www/
  145. xmalloc.c