From 61fdb8d487f62e5b89b3bef9cb2b212dcec6d1e5 Mon Sep 17 00:00:00 2001 From: smallcode <14190635@qq.com> Date: Mon, 17 Mar 2014 18:46:58 +0800 Subject: [PATCH] Fixed regression in file locking on some platforms. Some platforms with os.name == 'posix' do not have the fcntl module, e.g. AppEngine. refs #19373. --- django/core/files/locks.py | 46 +++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/django/core/files/locks.py b/django/core/files/locks.py index bcb218a036..8f7cef0a3e 100755 --- a/django/core/files/locks.py +++ b/django/core/files/locks.py @@ -85,29 +85,29 @@ if os.name == 'nt': overlapped = OVERLAPPED() ret = UnlockFileEx(hfile, 0, 0, 0xFFFF0000, byref(overlapped)) return bool(ret) +else: + try: + import fcntl + LOCK_SH = fcntl.LOCK_SH # shared lock + LOCK_NB = fcntl.LOCK_NB # non-blocking + LOCK_EX = fcntl.LOCK_EX + except (ImportError, AttributeError): + # File locking is not supported. + LOCK_EX = LOCK_SH = LOCK_NB = 0 -elif os.name == 'posix': - import fcntl - LOCK_SH = fcntl.LOCK_SH # shared lock - LOCK_NB = fcntl.LOCK_NB # non-blocking - LOCK_EX = fcntl.LOCK_EX + # Dummy functions that don't do anything. + def lock(f, flags): + # File is not locked + return False - def lock(f, flags): - ret = fcntl.flock(_fd(f), flags) - return (ret == 0) + def unlock(f): + # File is unlocked + return True + else: + def lock(f, flags): + ret = fcntl.flock(_fd(f), flags) + return (ret == 0) - def unlock(f): - ret = fcntl.flock(_fd(f), fcntl.LOCK_UN) - return (ret == 0) - -else: # File locking is not supported. - LOCK_EX = LOCK_SH = LOCK_NB = 0 - - # Dummy functions that don't do anything. - def lock(f, flags): - # File is not locked - return False - - def unlock(f): - # File is unlocked - return True + def unlock(f): + ret = fcntl.flock(_fd(f), fcntl.LOCK_UN) + return (ret == 0)