Skip to content

Commit 5e0e45f

Browse files
committed
Don't unobserve (multithreading issue)
1 parent f086246 commit 5e0e45f

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

src/ypywidgets/comm.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ def __init__(
5454
msg = create_sync_message(ydoc)
5555
self._comm.send(buffers=[msg])
5656
self._comm.on_msg(self._receive)
57-
self._subscription_id = ydoc.observe(self._bufferize)
58-
self._updates: list[bytes] = []
57+
ydoc.observe(self._bufferize)
58+
self._updates: list[bytes] | None = []
5959

6060
@property
6161
def awareness(self) -> Awareness:
@@ -69,19 +69,20 @@ def _receive(self, msg):
6969
if reply is not None:
7070
self._comm.send(buffers=[reply])
7171
if message[1] == YSyncMessageType.SYNC_STEP2:
72-
self._ydoc.unobserve(self._subscription_id)
72+
assert self._updates is not None
7373
for update in self._updates:
7474
message = create_update_message(update)
7575
self._comm.send(buffers=[message])
76-
self._updates.clear()
77-
self._subscription_id = self._ydoc.observe(self._send)
76+
self._updates = None
77+
self._ydoc.observe(self._send)
7878
case YMessageType.AWARENESS:
7979
# Same as pycrdt.websocket.yroom: strip Y message kind, decode body.
8080
update = read_message(message[1:])
8181
self._awareness.apply_awareness_update(update, None)
8282

8383
def _bufferize(self, event: TransactionEvent):
84-
self._updates.append(event.update)
84+
if self._updates is not None:
85+
self._updates.append(event.update)
8586

8687
def _send(self, event: TransactionEvent):
8788
message = create_update_message(event.update)

0 commit comments

Comments
 (0)