Skip to content

Commit

Permalink
service: avoid taking another lock in the usual case
Browse files Browse the repository at this point in the history
  • Loading branch information
dw committed Jul 29, 2019
1 parent 50bfe4c commit e93762b
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions mitogen/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -547,15 +547,18 @@ def join(self):
invoker.service.on_shutdown()

def get_invoker(self, name, msg):
self._lock.acquire()
try:
invoker = self._invoker_by_name.get(name)
if not invoker:
service = self._activator.activate(self, name, msg)
invoker = service.invoker_class(service=service)
self._invoker_by_name[name] = invoker
finally:
self._lock.release()
invoker = self._invoker_by_name.get(name)
if invoker is None:
# Avoid acquiring lock if possible.
self._lock.acquire()
try:
invoker = self._invoker_by_name.get(name)
if not invoker:
service = self._activator.activate(self, name, msg)
invoker = service.invoker_class(service=service)
self._invoker_by_name[name] = invoker
finally:
self._lock.release()

return invoker

Expand Down

0 comments on commit e93762b

Please sign in to comment.