Fixed #9084 - Best approach for an OS to atomically rename the session file.

This commit is contained in:
Joeri Bekker 2013-02-24 14:05:29 +01:00 committed by Aymeric Augustin
parent 7106a1e594
commit b9cc61021a
1 changed files with 6 additions and 1 deletions

View File

@ -1,6 +1,7 @@
import datetime
import errno
import os
import shutil
import tempfile
from django.conf import settings
@ -147,7 +148,11 @@ class SessionStore(SessionBase):
os.write(output_file_fd, self.encode(session_data).encode())
finally:
os.close(output_file_fd)
os.rename(output_file_name, session_file_name)
# This will atomically rename the file (os.rename) if the OS
# supports it. Otherwise this will result in a shutil.copy2
# and os.unlink (for example on Windows). See #9084.
shutil.move(output_file_name, session_file_name)
renamed = True
finally:
if not renamed: