|
Line 0
Link Here
|
|
|
1 |
--- libexec/dma/dma.c.orig 2009-02-09 01:36:50.000000000 +0100 |
| 2 |
+++ libexec/dma/dma.c 2009-07-04 00:12:53.000000000 +0200 |
| 3 |
@@ -612,6 +612,7 @@ |
| 4 |
const char *errmsg = "unknown bounce reason"; |
| 5 |
struct timeval now; |
| 6 |
struct stat st; |
| 7 |
+ struct flock fl; |
| 8 |
|
| 9 |
syslog(LOG_INFO, "%s: mail from=<%s> to=<%s>", |
| 10 |
it->queueid, it->sender, it->addr); |
| 11 |
@@ -620,11 +621,27 @@ |
| 12 |
syslog(LOG_INFO, "%s: trying delivery", |
| 13 |
it->queueid); |
| 14 |
|
| 15 |
+ bzero(&fl, sizeof(fl)); |
| 16 |
+ fl.l_type = F_WRLCK; |
| 17 |
+ fl.l_whence = SEEK_SET; |
| 18 |
+ if (fcntl(fileno(it->queuef), F_SETLKW, &fl) == -1) { |
| 19 |
+ syslog(LOG_ERR, "%s: failed to lock queue file: %m", |
| 20 |
+ it->queueid); |
| 21 |
+ } |
| 22 |
+ |
| 23 |
if (it->remote) |
| 24 |
error = deliver_remote(it, &errmsg); |
| 25 |
else |
| 26 |
error = deliver_local(it, &errmsg); |
| 27 |
|
| 28 |
+ bzero(&fl, sizeof(fl)); |
| 29 |
+ fl.l_type = F_UNLCK; |
| 30 |
+ fl.l_whence = SEEK_SET; |
| 31 |
+ if (fcntl(fileno(it->queuef), F_SETLKW, &fl) == -1) { |
| 32 |
+ syslog(LOG_ERR, "%s: failed to unlock queue file: %m", |
| 33 |
+ it->queueid); |
| 34 |
+ } |
| 35 |
+ |
| 36 |
switch (error) { |
| 37 |
case 0: |
| 38 |
unlink(it->queuefn); |