From 3717e3bba331af184a411a3781483aba8a11987a Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Fri, 29 Aug 2008 17:32:21 +0000 Subject: [PATCH] Reverted #8688 for now, since it merely introduced different bugs, rather than fixing the problem. We have a plan B (and plan C, if needed), so this will be fixed in a different way. Refs #8616. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8707 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- AUTHORS | 1 - django/contrib/sessions/backends/file.py | 48 ++++-------------------- 2 files changed, 8 insertions(+), 41 deletions(-) diff --git a/AUTHORS b/AUTHORS index 4b753f59a4..2428f6a9ac 100644 --- a/AUTHORS +++ b/AUTHORS @@ -363,7 +363,6 @@ answer newbie questions, and generally made Django that much better: Ben Slavin sloonz SmileyChris - Warren Smith smurf@smurf.noris.de Vsevolod Solovyov sopel diff --git a/django/contrib/sessions/backends/file.py b/django/contrib/sessions/backends/file.py index 0391e09f25..36a03b6353 100644 --- a/django/contrib/sessions/backends/file.py +++ b/django/contrib/sessions/backends/file.py @@ -5,9 +5,7 @@ import tempfile from django.conf import settings from django.contrib.sessions.backends.base import SessionBase, CreateError from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured -from django.core.files import locks -IO_LOCK_SUFFIX = "_iolock" class SessionStore(SessionBase): """ @@ -44,35 +42,17 @@ class SessionStore(SessionBase): return os.path.join(self.storage_path, self.file_prefix + session_key) - def _key_to_io_lock_file(self, session_key=None): - """ - Get the I/O lock file associated with this session key. - """ - return self._key_to_file(session_key) + IO_LOCK_SUFFIX - def load(self): session_data = {} try: - # Open and acquire a shared lock on the I/O lock file before - # attempting to read the session file. This makes us wait to read - # the session file until another thread or process is finished - # writing it. - lock_path = self._key_to_io_lock_file() - io_lock_file = open(lock_path, "rb") - locks.lock(io_lock_file, locks.LOCK_SH) + session_file = open(self._key_to_file(), "rb") try: - session_file = open(self._key_to_file(), "rb") try: - try: - session_data = self.decode(session_file.read()) - except (EOFError, SuspiciousOperation): - self.create() - finally: - session_file.close() + session_data = self.decode(session_file.read()) + except (EOFError, SuspiciousOperation): + self.create() finally: - locks.unlock(io_lock_file) - io_lock_file.close() - os.unlink(lock_path) + session_file.close() except IOError: pass return session_data @@ -96,23 +76,11 @@ class SessionStore(SessionBase): # truncating the file to save. session_data = self._get_session(no_load=must_create) try: - # Open and acquire an exclusive lock on the I/O lock file before - # attempting to write the session file. This makes other threads - # or processes wait to read or write the session file until we are - # finished writing it. - lock_path = self._key_to_io_lock_file() - io_lock_file = open(lock_path, "wb") - locks.lock(io_lock_file, locks.LOCK_EX) + fd = os.open(self._key_to_file(self.session_key), flags) try: - fd = os.open(self._key_to_file(self.session_key), flags) - try: - os.write(fd, self.encode(session_data)) - finally: - os.close(fd) + os.write(fd, self.encode(session_data)) finally: - locks.unlock(io_lock_file) - io_lock_file.close() - os.unlink(lock_path) + os.close(fd) except OSError, e: if must_create and e.errno == errno.EEXIST: raise CreateError