diff --git a/deltachat-rpc-client/src/deltachat_rpc_client/rpc.py b/deltachat-rpc-client/src/deltachat_rpc_client/rpc.py index 4a181c528..024090283 100644 --- a/deltachat-rpc-client/src/deltachat_rpc_client/rpc.py +++ b/deltachat-rpc-client/src/deltachat_rpc_client/rpc.py @@ -4,7 +4,7 @@ import os import subprocess import sys from queue import Queue -from threading import Event, Thread +from threading import Event, Lock, Thread from typing import Any, Dict, Optional @@ -24,6 +24,7 @@ class Rpc: self._kwargs = kwargs self.process: subprocess.Popen self.id: int + self.id_lock: Lock self.event_queues: Dict[int, Queue] # Map from request ID to `threading.Event`. self.request_events: Dict[int, Event] @@ -55,6 +56,7 @@ class Rpc: **self._kwargs, ) self.id = 0 + self.id_lock = Lock() self.event_queues = {} self.request_events = {} self.request_results = {} @@ -143,14 +145,16 @@ class Rpc: def __getattr__(self, attr: str): def method(*args) -> Any: + self.id_lock.acquire() self.id += 1 request_id = self.id + self.id_lock.release() request = { "jsonrpc": "2.0", "method": attr, "params": args, - "id": self.id, + "id": request_id, } event = Event() self.request_events[request_id] = event