From a67a52f49a1df39e0f23e02c1e1c43a4b8eda47e Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Wed, 15 Feb 2012 20:08:09 +0100 Subject: [PATCH] [eit] enable shared locking usage for "unlocked" methods --- server/eit/commands/command.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/server/eit/commands/command.py b/server/eit/commands/command.py index 1a716d6ac..2bdeca401 100644 --- a/server/eit/commands/command.py +++ b/server/eit/commands/command.py @@ -184,19 +184,31 @@ class EitCommand(object): def _call_unlocked(self, func, repo): """ Execute the given function at func after acquiring Entropy - Resources Lock, for given repository at repo. + Resources Lock in shared mode, for given repository at repo. The signature of func is: int func(entropy_server). """ server = None + acquired = False try: try: server = self._entropy(default_repository=repo) except PermissionDenied as err: print_error(err.value) return 1 + # use blocking mode to avoid tainting stdout + acquired = entropy.tools.acquire_entropy_locks( + server, blocking=True, shared=True) + if not acquired: + server.output( + darkgreen(_("Another Entropy is currently running.")), + level="error", importance=1 + ) + return 1 return func(server) finally: if server is not None: + if acquired: + entropy.tools.release_entropy_locks(server) server.shutdown() def _settings(self):