Module: check_mk
Branch: master
Commit: 82242972f6f185af35641ebb1f92546703f7632b
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=82242972f6f185…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Apr 19 16:43:07 2012 +0200
Provide simple file locking API for applications
---
web/htdocs/index.py | 4 ++--
web/htdocs/lib.py | 19 ++++++++++++++++++-
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/web/htdocs/index.py b/web/htdocs/index.py
index ac1ecd5..19f6074 100644
--- a/web/htdocs/index.py
+++ b/web/htdocs/index.py
@@ -376,8 +376,8 @@ def handler(req, profiling = True):
html.footer()
response_code = apache.OK
- # Disconnect from livestatus!
- html.live = None
+ release_all_locks()
+ html.live = None # disconnects from livestatus
return response_code
def page_not_found():
diff --git a/web/htdocs/lib.py b/web/htdocs/lib.py
index 4ad5246..b448f55 100644
--- a/web/htdocs/lib.py
+++ b/web/htdocs/lib.py
@@ -24,7 +24,7 @@
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
-import grp, defaults, pprint, os, errno, gettext, marshal, __builtin__
+import grp, defaults, pprint, os, errno, gettext, marshal, fcntl, __builtin__
nagios_state_names = { -1: "NODATA", 0: "OK", 1: "WARNING",
2: "CRITICAL", 3: "UNKNOWN", 4: "DEPENDENT" }
nagios_short_state_names = { -1: "PEND", 0: "OK", 1:
"WARN", 2: "CRIT", 3: "UNKN", 4: "DEP" }
@@ -223,3 +223,20 @@ def set_is_disjoint(a, b):
if elem in b:
return False
return True
+
+# Functions for locking files. All locks must be freed if a request
+# has terminated (in good or in bad manner). Currently only exclusive
+# locks are implemented and they always will wait for ever.
+g_aquired_locks = []
+def aquire_lock(path):
+ fd = os.open(path, os.O_RDONLY)
+ fcntl.flock(fd, fcntl.LOCK_EX)
+ g_aquired_locks.append(fd)
+
+def release_all_locks():
+ global g_aquired_locks
+ for fd in g_aquired_locks:
+ os.close(fd)
+ g_aquired_locks = []
+
+