fix(deltachat-rpc-client): add the Lock around request ID

Avoid handing out the same request ID twice.
This commit is contained in:
link2xt
2023-11-06 16:49:34 +00:00
parent 99940dd28c
commit 836f65376c

View File

@@ -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