On 3/7/05, Philip Hazel <ph10@???> wrote:
> On Fri, 4 Mar 2005 niles@??? wrote:
>
> > I removed the old hints file,
>
> All of them???
>
> > and did a queue delivery with debugging on.
>
> > Delivery address list:
> > niles@???
> > locking /var/spool/exim/db/retry.lockfile
> > locked /var/spool/exim/db/retry.lockfile
> > LOG: MAIN PANIC
> > queue run: process 27196 crashed with signal 11 while delivering
> > 1D7M3b-0006Ec-2F
>
> That really does look as though the crash has happened in the DB
> library, when trying to open the retry hints file (the one for which it
> has just created a lock). That's why I asked whether you are sure you
> deleted all the hints files, in particular, /var/spool/exim/db/retry*
>
If anything's trying to report a Berkeley error I'd guess the results
will be somewhat undefined as the prototype of the error reporting
function has changed in 4.3:
http://www.sleepycat.com/docs/ref/upgrade.4.3/err.html
I've attached (a compiled, but as yet untested) patch.
--
Alex Kiernan
diff -ur exim-4.51.orig/src/dbfn.c exim-4.51/src/dbfn.c
--- exim-4.51.orig/src/dbfn.c 2005-05-04 12:35:39.000000000 +0100
+++ exim-4.51/src/dbfn.c 2005-06-08 06:32:12.000000000 +0100
@@ -44,7 +44,11 @@
#if defined(USE_DB) && defined(DB_VERSION_STRING)
void
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
+dbfn_bdb_error_callback(const DB_ENV *dbenv, const char *pfx, const char *msg)
+#else
dbfn_bdb_error_callback(const char *pfx, char *msg)
+#endif
{
pfx = pfx;
log_write(0, LOG_MAIN, "Berkeley DB error: %s", msg);
diff -ur exim-4.51.orig/src/dbfunctions.h exim-4.51/src/dbfunctions.h
--- exim-4.51.orig/src/dbfunctions.h 2005-05-04 12:35:39.000000000 +0100
+++ exim-4.51/src/dbfunctions.h 2005-06-08 06:26:16.000000000 +0100
@@ -24,7 +24,11 @@
/* Berkeley DB uses a callback function to pass back error details. */
#if defined(USE_DB) && defined(DB_VERSION_STRING)
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
+void dbfn_bdb_error_callback(const DB_ENV *, const char *, const char *);
+#else
void dbfn_bdb_error_callback(const char *, char *);
#endif
+#endif
/* End of dbfunctions.h */
diff -ur exim-4.51.orig/src/exim_dbmbuild.c exim-4.51/src/exim_dbmbuild.c
--- exim-4.51.orig/src/exim_dbmbuild.c 2005-05-04 12:35:39.000000000 +0100
+++ exim-4.51/src/exim_dbmbuild.c 2005-06-08 06:31:41.000000000 +0100
@@ -62,7 +62,11 @@
#if defined(USE_DB) && defined(DB_VERSION_STRING)
void
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
+dbfn_bdb_error_callback(const DB_ENV *dbenv, const char *pfx, const char *msg)
+#else
dbfn_bdb_error_callback(const char *pfx, char *msg)
+#endif
{
pfx = pfx;
printf("Berkeley DB error: %s\n", msg);
diff -ur exim-4.51.orig/src/exim_dbutil.c exim-4.51/src/exim_dbutil.c
--- exim-4.51.orig/src/exim_dbutil.c 2005-05-04 12:35:39.000000000 +0100
+++ exim-4.51/src/exim_dbutil.c 2005-06-08 06:31:53.000000000 +0100
@@ -81,7 +81,11 @@
#if defined(USE_DB) && defined(DB_VERSION_STRING)
void
+#if DB_VERSION_MAJOR > 4 || (DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3)
+dbfn_bdb_error_callback(const DB_ENV *dbenv, const char *pfx, const char *msg)
+#else
dbfn_bdb_error_callback(const char *pfx, char *msg)
+#endif
{
pfx = pfx;
printf("Berkeley DB error: %s\n", msg);