diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/config.c | 6 | ||||
-rw-r--r-- | src/job.c | 2 | ||||
-rw-r--r-- | src/lock.c | 18 | ||||
-rw-r--r-- | src/mail.c | 12 | ||||
-rw-r--r-- | src/process.c | 12 | ||||
-rw-r--r-- | src/wydawca.h | 3 |
6 files changed, 35 insertions, 18 deletions
diff --git a/src/config.c b/src/config.c index 4748a80..6c351d9 100644 --- a/src/config.c +++ b/src/config.c @@ -1343,10 +1343,8 @@ static struct grecs_keyword locking_kw[] = { grecs_type_string, &lockdir }, { "expire-time", N_("interval"), N_("Define lock expiration interval"), grecs_type_string, &lock_expire_time, 0, cb_interval }, - { "retry-attempts", N_("n"), N_("Number of times to retry locking"), - grecs_type_uint, &lock_retry_attempts }, - { "retry-interval", N_("interval"), N_("Delay between locking attempts"), - grecs_type_string, &lock_retry_interval, 0, cb_interval }, + { "timeout", N_("interval"), N_("Locking timeout"), + grecs_type_string, &lock_timeout, 0, cb_interval }, { NULL } }; @@ -319,7 +319,7 @@ job_queue_runner () if (WIFEXITED (job->exit_status) && WEXITSTATUS (job->exit_status) == WYDAWCA_EX_AGAIN) { - time_t interval = lock_retry_attempts * lock_retry_interval; + time_t interval = lock_timeout; if (interval == 0) interval = lock_expire_time; /* Re-queue the job */ @@ -21,8 +21,7 @@ int enable_locking = 1; char *lockdir; time_t lock_expire_time = 5*60; -unsigned lock_retry_attempts = 3; -time_t lock_retry_interval = 1; +time_t lock_timeout = 60; #define LOCKFILE_MODE 0644 @@ -192,18 +191,19 @@ wydawca_lock (const char *lockname) (unsigned long) time (NULL), xgethostname ()); if (!tempname) return LOCK_FAILURE; - if (lock_retry_attempts) + if (lock_timeout) { - unsigned i; - - for (i = 0; i < lock_retry_attempts; i++) + time_t start = time (NULL); + + do { rc = _lock_internal (lockname, tempname); - if (rc == 0) - break; if (rc == LOCK_RETRY) - sleep (lock_retry_interval); + sleep (1); + else + break; } + while (time (NULL) - start < lock_timeout); } else rc = _lock_internal (lockname, tempname); @@ -55,7 +55,8 @@ mail_send_message (mu_address_t rcpt, const char *text) static char *x_mailer = "wydawca (" PACKAGE_STRING ")"; size_t size; char *buf; - + const char *sval; + mu_message_create (&msg, NULL); mu_message_get_stream (msg, &stream); @@ -70,6 +71,15 @@ mail_send_message (mu_address_t rcpt, const char *text) mu_header_set_value (hdr, "To", buf, 1); free (buf); + if (from_address && mu_header_sget_value (hdr, "From", &sval)) + { + mu_address_to_string (from_address, NULL, 0, &size); + buf = xmalloc (size + 1); + mu_address_to_string (from_address, buf, size + 1, NULL); + mu_header_set_value (hdr, "From", buf, 1); + free (buf); + } + if (debug_level > 1) { mu_debug_t debug; diff --git a/src/process.c b/src/process.c index d04121c..a998edb 100644 --- a/src/process.c +++ b/src/process.c @@ -230,10 +230,20 @@ scan_spool (const struct spool *spool, int uc, uid_t *uv) { char *lockfile = wydawca_lockname (spool->tag); int rc = wydawca_lock (lockfile); - if (rc == LOCK_OK) + switch (rc) { + case LOCK_OK: scan_spool_unlocked (spool, uc, uv); wydawca_unlock (lockfile); + break; + + case LOCK_FAILURE: + logmsg (LOG_ERR, _("cannot lock spool %s"), spool->tag); + break; + + case LOCK_RETRY: + logmsg (LOG_WARNING, _("timed out while looking spool %s"), spool->tag); + break; } free (lockfile); return rc; diff --git a/src/wydawca.h b/src/wydawca.h index 15d803b..bd81b88 100644 --- a/src/wydawca.h +++ b/src/wydawca.h @@ -332,8 +332,7 @@ extern int force_startup; extern char *lockdir; extern time_t lock_expire_time; -unsigned lock_retry_attempts; -time_t lock_retry_interval; +extern time_t lock_timeout; extern int enable_locking; extern int daemon_mode; |