Skip to content

Commit

Permalink
fix(deltachat-rpc-client): add the Lock around request ID
Browse files Browse the repository at this point in the history
Avoid handing out the same request ID twice.
  • Loading branch information
link2xt committed Nov 6, 2023
1 parent 99940dd commit 836f653
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions deltachat-rpc-client/src/deltachat_rpc_client/rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
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


Expand All @@ -24,6 +24,7 @@ def __init__(self, accounts_dir: Optional[str] = None, **kwargs):
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]
Expand Down Expand Up @@ -55,6 +56,7 @@ def start(self) -> None:
**self._kwargs,
)
self.id = 0
self.id_lock = Lock()
self.event_queues = {}
self.request_events = {}
self.request_results = {}
Expand Down Expand Up @@ -143,14 +145,16 @@ def wait_for_event(self, account_id: int) -> Optional[dict]:

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
Expand Down

0 comments on commit 836f653

Please sign in to comment.