Len Conrad:
> >The only thing postscreen does after "postfix reload" (or stop) is
> >to fork a child process and terminate immediately in the parent
> >process; the child continues in the background, closes the Berkeley
> >DB table, erases the Berkeley DB handle, accepts no new connections,
> >and completes the client tests that are already in progress, without
> >saving the result.
> >
> >Perhaps you can see if "postfix reload" reproduces the error message.
> 
> 
> mx6# date
> Tue Dec  8 21:08:14 EST 2009
> 
> mx6# postfix reload
> postfix/postfix-script: refreshing the Postfix mail system
> 
> Dec  8 21:08:18 mx6 postfix/postscreen[12148]: fatal: close database 
> /var/db/postfix/ps_cache.db: No such file or directory

Maybe you can try this patch. It moves the close() before the
fork(), and that would make a difference if Berkeley DB objects to
process ID changes.

If that does not help, then I recommend using use an older Berkeley
DB version (like, the default FreeBSD one).

        Wietse

*** ./postscreen.c-     Sat Dec  5 19:52:45 2009
--- ./postscreen.c      Wed Dec  9 06:43:47 2009
***************
*** 987,992 ****
--- 987,996 ----
       * but we don't need perfection. The host system is severely overloaded
       * and service levels are already way down.
       */
+     if (cache_map != 0) {
+       dict_close(cache_map);
+       cache_map = 0;
+     }
      for (count = 0; /* see below */ ; count++) {
        if (count >= 5) {
            msg_fatal("fork: %m");
***************
*** 995,1004 ****
            sleep(1);
            continue;
        } else {
-           if (cache_map != 0) {
-               dict_close(cache_map);
-               cache_map = 0;
-           }
            return;
        }
      }
--- 999,1004 ----

Reply via email to