Skip to content

Commit e93762b

Browse files
committed
service: avoid taking another lock in the usual case
1 parent 50bfe4c commit e93762b

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

mitogen/service.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -547,15 +547,18 @@ def join(self):
547547
invoker.service.on_shutdown()
548548

549549
def get_invoker(self, name, msg):
550-
self._lock.acquire()
551-
try:
552-
invoker = self._invoker_by_name.get(name)
553-
if not invoker:
554-
service = self._activator.activate(self, name, msg)
555-
invoker = service.invoker_class(service=service)
556-
self._invoker_by_name[name] = invoker
557-
finally:
558-
self._lock.release()
550+
invoker = self._invoker_by_name.get(name)
551+
if invoker is None:
552+
# Avoid acquiring lock if possible.
553+
self._lock.acquire()
554+
try:
555+
invoker = self._invoker_by_name.get(name)
556+
if not invoker:
557+
service = self._activator.activate(self, name, msg)
558+
invoker = service.invoker_class(service=service)
559+
self._invoker_by_name[name] = invoker
560+
finally:
561+
self._lock.release()
559562

560563
return invoker
561564

0 commit comments

Comments
 (0)