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); |