aboutsummaryrefslogtreecommitdiffstats
path: root/archivemail.py
diff options
context:
space:
mode:
authorNikolaus Schulz <microschulz@web.de>2009-03-03 04:33:09 +0100
committerNikolaus Schulz <microschulz@web.de>2010-07-19 01:13:25 +0200
commitd706409c595a5994371d2b238b2a5e77be171f13 (patch)
treec875598f9e6a88274d195c1f50d257434fbabe2a /archivemail.py
parentd7265894143f3d6d5a23c5d4f8342957316b3c8d (diff)
downloadarchivemail-d706409c595a5994371d2b238b2a5e77be171f13.tar.gz
archivemail-d706409c595a5994371d2b238b2a5e77be171f13.tar.bz2
archivemail-d706409c595a5994371d2b238b2a5e77be171f13.zip
Switch mbox locking from flock(2) to posix lockf(2)
flock() locks aren't portable; lockf() locks are.
Diffstat (limited to 'archivemail.py')
-rwxr-xr-xarchivemail.py18
1 files changed, 9 insertions, 9 deletions
diff --git a/archivemail.py b/archivemail.py
index dd2f2b4..0e89351 100755
--- a/archivemail.py
+++ b/archivemail.py
@@ -351,15 +351,15 @@ class Mbox(mailbox.UnixMailbox):
os.utime(self.mbox_file_name, (self.original_atime, \
self.original_mtime))
- def exclusive_lock(self):
- """Set an advisory lock on the 'mbox' mailbox"""
+ def posix_lock(self):
+ """Set an exclusive posix lock on the 'mbox' mailbox"""
vprint("obtaining exclusive lock on file '%s'" % self.mbox_file_name)
- fcntl.flock(self.mbox_file.fileno(), fcntl.LOCK_EX)
+ fcntl.lockf(self.mbox_file, fcntl.LOCK_EX|fcntl.LOCK_NB)
- def exclusive_unlock(self):
- """Unset any advisory lock on the 'mbox' mailbox"""
- vprint("dropping exclusive lock on file '%s'" % self.mbox_file_name)
- fcntl.flock(self.mbox_file.fileno(), fcntl.LOCK_UN)
+ def posix_unlock(self):
+ """Unset any posix lock on the 'mbox' mailbox"""
+ vprint("dropping posix lock on file '%s'" % self.mbox_file_name)
+ fcntl.lockf(self.mbox_file, fcntl.LOCK_UN)
def dotlock_lock(self):
"""Create a dotlock file on the 'mbox' mailbox"""
@@ -1133,7 +1133,7 @@ def _archive_mbox(mailbox_name, final_archive_name):
archive = ArchiveMbox(final_archive_name)
original.dotlock_lock()
- original.exclusive_lock()
+ original.posix_lock()
msg = original.next()
if not msg and (original.starting_size > 0):
user_error("'%s' is not a valid mbox-format mailbox" % mailbox_name)
@@ -1164,7 +1164,7 @@ def _archive_mbox(mailbox_name, final_archive_name):
archive.finalise()
if retain:
retain.finalise()
- original.exclusive_unlock()
+ original.posix_unlock()
original.close()
original.reset_timestamps()
original.dotlock_unlock()