Bugfix: fix IPC messages writes with low buffer sizes (Thanks jasper, dcoppa)
Use the following command to reproduce this bug: echo 4096 | sudo tee /proc/sys/net/core/wmem_default Then just switch workspaces with some windows on it and i3bar would exit due to malformed IPC messages. This bug hits OpenBSD users (and possibly other BSDs) due to their lower default buffer size. fixes #896
This commit is contained in:
parent
c394efbfd0
commit
f5b7bfb12e
|
@ -10,6 +10,7 @@
|
|||
#include <unistd.h>
|
||||
#include <stdint.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <i3/ipc.h>
|
||||
|
||||
|
@ -38,14 +39,15 @@ int ipc_send_message(int sockfd, uint32_t message_size,
|
|||
memcpy(walk, payload, message_size);
|
||||
|
||||
int sent_bytes = 0;
|
||||
int bytes_to_go = buffer_size;
|
||||
while (sent_bytes < bytes_to_go) {
|
||||
int n = write(sockfd, msg + sent_bytes, bytes_to_go);
|
||||
if (n == -1)
|
||||
while (sent_bytes < buffer_size) {
|
||||
int n = write(sockfd, msg + sent_bytes, buffer_size - sent_bytes);
|
||||
if (n == -1) {
|
||||
if (errno == EAGAIN)
|
||||
continue;
|
||||
return -1;
|
||||
}
|
||||
|
||||
sent_bytes += n;
|
||||
bytes_to_go -= n;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue