If this really started happening only with v1.2.4 -> v1.2.5, the only change that looks anything like it could have to do with this problem is the attached patch. I guess you could try reversing it and seeing if it helps..
--- /home/timo/m/dovecot-1.2.4/src/master/main.c 2009-05-20 17:48:16.000000000 -0400
+++ ./main.c 2009-10-29 16:05:50.000000000 -0400
@@ -139,6 +139,46 @@
i_set_failure_timestamp_format(set->log_timestamp);
}
+static void ATTR_NORETURN
+tee_fatal_handler(enum log_type type, int status, const char *fmt, va_list args)
+{
+ const struct settings *set = settings_root->defaults;
+ va_list args2;
+
+ VA_COPY(args2, args);
+ fprintf(stderr, "Fatal: %s\n", t_strdup_vprintf(fmt, args2));
+
+ if (*set->log_path == '\0') {
+ i_syslog_fatal_handler(type, status, fmt, args);
+ } else {
+ default_fatal_handler(type, status, fmt, args);
+ }
+}
+
+static void
+tee_error_handler(enum log_type type, const char *fmt, va_list args)
+{
+ const struct settings *set = settings_root->defaults;
+ va_list args2;
+
+ VA_COPY(args2, args);
+ fprintf(stderr, "Error: %s\n", t_strdup_vprintf(fmt, args2));
+
+ if (*set->log_path == '\0') {
+ i_syslog_error_handler(type, fmt, args);
+ } else {
+ default_error_handler(type, fmt, args);
+ }
+}
+
+static void set_tee_logfile(struct settings *set)
+{
+ set_logfile(set);
+
+ i_set_fatal_handler(tee_fatal_handler);
+ i_set_error_handler(tee_error_handler);
+}
+
static void settings_reload(void)
{
struct server_settings *old_set = settings_root;
@@ -222,7 +262,7 @@
fd_close_on_exec(null_fd, TRUE);
}
-static void open_fds(void)
+static void open_std_fds(void)
{
/* make sure all fds between 0..3 are used. */
while (null_fd < 4) {
@@ -232,12 +272,6 @@
fd_close_on_exec(null_fd, TRUE);
}
- if (!IS_INETD()) {
- T_BEGIN {
- listeners_open_fds(NULL, FALSE);
- } T_END;
- }
-
/* close stdin and stdout. */
if (dup2(null_fd, 0) < 0)
i_fatal("dup2(0) failed: %m");
@@ -600,11 +634,20 @@
mail_process_exec(exec_protocol, exec_args);
}
- if (!log_error)
- open_fds();
+ /* closes stdin/stdout, must be after --exec-mail handling */
+ open_std_fds();
+
+ /* log all errors to both stderr and log file until we've finished
+ startup. */
+ set_tee_logfile(settings_root->defaults);
fatal_log_check();
auth_warning_print(settings_root);
+
+ if (!log_error && !IS_INETD()) T_BEGIN {
+ listeners_open_fds(NULL, FALSE);
+ } T_END;
+
if (!foreground)
daemonize(settings_root->defaults);
master_original_pid = getpid();
signature.asc
Description: This is a digitally signed message part
