Fix kitty discarding peer messages in rapid succession
This commit is contained in:
parent
fe3bb92b54
commit
6352f585e8
@ -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')
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user