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
noteLocks 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]: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access