Queue File Locking
When old versions of sendmail
process a queued message (attempt to redeliver it)
they create an empty lock file. That lock file was
needed to signal other running
sendmail processes that the
mail message was busy so that they shouldn’t try to
deliver the message too. Current versions simply
flock(2) or
fcntl(2) lock the qf
file.
Current-style file locking
The method that sendmail uses to initially create an exclusive lock when first queueing a file is twofold. First it attempts to creat(2) the file with the argument:
O_CREAT|O_WRONLY|O_EXCL
If that succeeds, it then attempts to lock the
file. If HASFLOCK (HAS... on
page 114) is defined when
sendmail is compiled, the
file is locked with flock(2).
Otherwise, it is locked with a
fcntl(2) F_SETLK
argument.
Locks shown when printing the queue
When mailq is run (or the
-bp
command-line switch is given to
sendmail), the contents of
the queue are listed. In that listing, an asterisk
that appears to the right of an identifier
indicates that a lock exists on the
message:
/var/spool/mqueue/df (1 request)
----Q-ID---- --Size-- -----Q-Time----- ------------Sender/Recipient------------
dB91UPA04168* 0 Wed Dec 8 17:30 <gw@wash.dc.gov>
↑
<ben@franklin.edu
note
Locks can get stuck
Occasionally, a file will become locked and remain that way for a long time. One indication of a stuck lock is a series of syslog messages about a given identifier:
Apr 12 00:33:38 ourhost sendmail[641]: dB91UPA04168: locked Apr 12 01:22:14 ourhost sendmail[976]: ...
Get sendmail, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.