- log_write(0, LOG_MAIN, "%s",
- string_open_failed("database lock file %s", filename));
- errno = 0; /* Indicates locking failure */
- DEBUG(D_hints_lookup) acl_level--;
- return NULL;
- }
-
-/* Now we must get a lock on the opened lock file; do this with a blocking
-lock that times out. */
-
-lock_data.l_type = read_only? F_RDLCK : F_WRLCK;
-lock_data.l_whence = lock_data.l_start = lock_data.l_len = 0;
-
-DEBUG(D_hints_lookup|D_retry|D_route|D_deliver)
- debug_printf_indent("locking %s\n", filename);
-
-sigalrm_seen = FALSE;
-ALARM(EXIMDB_LOCK_TIMEOUT);
-rc = fcntl(dbblock->lockfd, F_SETLKW, &lock_data);
-ALARM_CLR(0);
-
-if (sigalrm_seen) errno = ETIMEDOUT;
-if (rc < 0)
- {
- log_write(0, LOG_MAIN|LOG_PANIC, "Failed to get %s lock for %s: %s",
- read_only ? "read" : "write", filename,
- errno == ETIMEDOUT ? "timed out" : strerror(errno));
- (void)close(dbblock->lockfd);
- errno = 0; /* Indicates locking failure */
- DEBUG(D_hints_lookup) acl_level--;
- return NULL;
+ if (!lockfile_take(dbblock, filename, flags == O_RDONLY, panic))
+ {
+ DEBUG(D_hints_lookup) acl_level--;
+ return NULL;
+ }