Re: MAIN PANIC, SEGV & the dbm file

Página Principal
Apagar esta mensagem
Responder a esta mensagem
Autor: Philip Hazel
Data:  
Para: Benjamin Welch II
CC: exim-users
Assunto: Re: MAIN PANIC, SEGV & the dbm file
On Sun, 2 Nov 1997, Benjamin Welch II wrote:

> I am attempting to build 1.73 over the 1.62 version (that someone
> else
>
> built)on a BSDI machine. In the last two attempts, Exim has produced
>
> ~20 megs of the following before I can kill the process:
>
>
> LOG: 0 MAIN PANIC
>
> SEGV while reading "" from dbm file: record assumed not to exist


(1) Try deleting all Exim's hints databases; that looks like one has been
corrupted, though why is it looping is worrying.

(2) Try applying the patch below, which fixes a bit of particularly
silly stupidity on my part when trying to catch SEGVs inside the DBM
library, in order to allow deliveries to continue.

-- 
Philip Hazel                   University Computing Service,
ph10@???             New Museums Site, Cambridge CB2 3QG,
P.Hazel@???          England.  Phone: +44 1223 334714




*** exim-1.73/src/dbfn.c    Tue Sep 30 14:54:43 1997
--- dbfn.c      Mon Oct 27 16:16:34 1997
***************
*** 248,256 ****


  if (setjmp(read_env) == 0)
    {
    signal(SIGSEGV, segv_handler);
!   if (!EXIM_DBGET(dbm, key_datum, result_datum)) return NULL;
    signal(SIGSEGV, SIG_DFL);
    yield = (void *)store_malloc(EXIM_DATUM_SIZE(result_datum));
    memcpy(yield, EXIM_DATUM_DATA(result_datum), EXIM_DATUM_SIZE(result_datum));
    if (length != NULL) *length = EXIM_DATUM_SIZE(result_datum);
--- 248,258 ----


  if (setjmp(read_env) == 0)
    {
+   BOOL found;
    signal(SIGSEGV, segv_handler);
!   found = EXIM_DBGET(dbm, key_datum, result_datum);
    signal(SIGSEGV, SIG_DFL);
+   if (!found) return NULL;
    yield = (void *)store_malloc(EXIM_DATUM_SIZE(result_datum));
    memcpy(yield, EXIM_DATUM_DATA(result_datum), EXIM_DATUM_SIZE(result_datum));
    if (length != NULL) *length = EXIM_DATUM_SIZE(result_datum);




--
* This is sent by the exim-users mailing list.  To unsubscribe send a
    mail with subject "unsubscribe" to exim-users-request@???
* Exim information can be found at http://www.exim.org/