Fix kitty discarding peer messages in rapid succession

This commit is contained in:
Kovid Goyal 2017-11-27 19:51:34 +05:30
parent fe3bb92b54
commit 6352f585e8
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 27 additions and 22 deletions

View File

@ -97,8 +97,9 @@ class Boss:
self.child_monitor.add_child(window.id, window.child.pid, window.child.child_fd, window.screen)
self.window_id_map[window.id] = window
def peer_msg_received(self, msg):
def peer_messages_received(self, messages):
import json
for msg in messages:
msg = json.loads(msg.decode('utf-8'))
if isinstance(msg, dict) and msg.get('cmd') == 'new_instance':
startup_id = msg.get('startup_id')

View File

@ -339,11 +339,15 @@ parse_input(ChildMonitor *self) {
}
if (UNLIKELY(self->messages_count)) {
while(self->messages_count) {
Message *m = self->messages + --self->messages_count;
msg = PyBytes_FromStringAndSize(m->data, m->sz);
msg = PyTuple_New(self->messages_count);
if (msg) {
for (size_t i = 0; i < self->messages_count; i++) {
Message *m = self->messages + i;
PyTuple_SET_ITEM(msg, i, PyBytes_FromStringAndSize(m->data, m->sz));
free(m->data); m->data = NULL; m->sz = 0;
}
self->messages_count = 0;
} else fatal("Out of memory");
}
if (UNLIKELY(signal_received)) {
@ -357,7 +361,7 @@ parse_input(ChildMonitor *self) {
}
children_mutex(unlock);
if (msg) {
call_boss(peer_msg_received, "O", msg);
call_boss(peer_messages_received, "(O)", msg);
Py_CLEAR(msg);
}