54e7a31568
I was able to reproduce #3579 in Linux by running: `sudo sysctl net.core.wmem_default=10000` If a subscription message was too big to be sent at once, it was possible to break a client by sending a reply to an other message sent by the client. Eg: - Write 8192 out of 11612 bytes of a workspace event. - Blockingly write the reply to a workspace change message. - Write the rest 3420 bytes of the workspace event. This commit fixes this by utilizing the ipc queue for all types of writes. ipc_receive_message can only be called from a callback started in ipc_new_client. This callback uses the same file descriptor with the client also created in ipc_new_client. When the client is deleted, the read callback is now also stopped. Thus, we can assume that whenever ipc_receive_message is called, the corresponding client should still exist. - ipc_client now contains pointers to both write and read watchers. When freed, a client will stop both of them. - IPC_HANDLERs now work with ipc_clients instead of fds. Fixes #3579. |
||
---|---|---|
.github | ||
AnyEvent-I3 | ||
contrib | ||
debian | ||
docs | ||
etc | ||
i3-config-wizard | ||
i3-dump-log | ||
i3-input | ||
i3-msg | ||
i3-nagbar | ||
i3bar | ||
include | ||
libi3 | ||
m4 | ||
man | ||
parser-specs | ||
share | ||
src | ||
testcases | ||
travis | ||
.clang-format | ||
.editorconfig | ||
.gitignore | ||
.travis.yml | ||
DEPENDS | ||
I3_VERSION | ||
LICENSE | ||
Makefile.am | ||
PACKAGE-MAINTAINER | ||
README.md | ||
RELEASE-NOTES-4.14.1 | ||
RELEASE-NOTES-4.16 | ||
configure.ac | ||
generate-command-parser.pl | ||
i3-dmenu-desktop | ||
i3-migrate-config-to-v4 | ||
i3-save-tree | ||
i3-sensible-editor | ||
i3-sensible-pager | ||
i3-sensible-terminal | ||
logo.svg | ||
pseudo-doc.doxygen | ||
release.sh |
README.md
i3: A tiling window manager
i3 is a tiling window manager for X11.
For more information about i3, please see the project's website and online documentation.
For information about contributing to i3, please see CONTRIBUTING.md.