commit - 7b0be57c7cb536303ba948e71fcd81f40f85f0c3
commit + b8fd0ed6d85ecf09d927c6551d1e233f41bd68ab
blob - 88b9b979998d210062fdde5d8e9507772e1a56d3
blob + 6d8e0e4e3262ab70488c88ff0cdbc9e1f647b5a8
--- net.c
+++ net.c
struct req *req = d;
struct evbuffer *src = EVBUFFER_INPUT(bev);
void *data;
- size_t len;
+ size_t len, chunk;
int r;
char *header;
if ((len = EVBUFFER_LENGTH(src)) == 0)
return;
data = EVBUFFER_DATA(src);
- net_send_ui(IMSG_BUF, req->id, data, len);
- evbuffer_drain(src, len);
+
+ /*
+ * Split data into chunks before sending. imsg can't handle
+ * message that are "too big".
+ */
+ while (len != 0) {
+ chunk = MIN(len, 4096);
+ net_send_ui(IMSG_BUF, req->id, data, chunk);
+ data += chunk;
+ len -= chunk;
+ }
+
+ evbuffer_drain(src, EVBUFFER_LENGTH(src));
return;
err: