@@ -32,6 +32,9 @@ __version__ = '.'.join((str(each) for ea
__dbversion__ = 3 #defines current db version for migrations
__platform__ = platform.system()
PLATFORM_WIN = ('Windows',)
PLATFORM_OTHERS = ('Linux', 'Darwin', 'FreeBSD',)
try:
from rhodecode.lib.utils import get_current_revision
_rev = get_current_revision()
@@ -4,6 +4,19 @@ from warnings import warn
from multiprocessing.util import Finalize
import errno
from rhodecode import __platform__, PLATFORM_WIN
if __platform__ in PLATFORM_WIN:
import ctypes
def kill(pid):
"""kill function for Win32"""
kernel32 = ctypes.windll.kernel32
handle = kernel32.OpenProcess(1, 0, pid)
return (0 != kernel32.TerminateProcess(handle, 0))
else:
kill = os.kill
class LockHeld(Exception):pass
@@ -58,9 +71,9 @@ class DaemonLock(object):
pidfile = open(self.pidfile, "r")
pidfile.seek(0)
running_pid = int(pidfile.readline())
pidfile.close()
if self.debug:
print 'lock file present running_pid: %s, checking for execution'\
% running_pid
@@ -68,19 +81,19 @@ class DaemonLock(object):
# process PID
if running_pid:
os.kill(running_pid, 0)
kill(running_pid, 0)
except OSError, exc:
if exc.errno in (errno.ESRCH, errno.EPERM):
print "Lock File is there but the program is not running"
print "Removing lock file for the: %s" % running_pid
self.release()
raise
print "You already have an instance of the program running"
print "It is running as process %s" % running_pid
raise LockHeld()
except IOError, e:
if e.errno != 2:
@@ -90,7 +103,7 @@ class DaemonLock(object):
"""
print 'trying to release the pidlock'
if self.callbackfn:
#execute callback function on release
Status change: