[comp.mail.mh] Repl: segmentation fault

gatesl@ucs.orst.edu (Lee Gates) (11/01/90)

Hello, I am trying (first time install) to get MH 6.7 going on a NeXT Cube,
but am having a few problems.  I can get everything to compile, but it seems
repl is being generated corrupt.  When I run repl, it comes back segmentation
fault.  I have tried recompiling several times, only to reproduce the error.

If you have an ideas that might help, I would really appreciate it.

here are the options I am using.  If there is an error here, please let me know.

options	BSD42 BSD43 BIND DBM MHRC FOLDPROT='"0700"' MHRC MORE='"/usr/ucb/more"' MSGPROT='"0600"' RPATHS TYPESIG='void' WHATNOW

thanx
lee
--
Lee Gates --  Living in the Land of Rain, Corvallis OR
gatesl@mist.cs.orst.edu

iansmith@nagel.gatech.edu (Ian Smith) (11/06/90)

In article <21478@orstcs.CS.ORST.EDU> gatesl@ucs.orst.edu (Lee Gates) writes:
>Hello, I am trying (first time install) to get MH 6.7 going on a NeXT Cube,
>but am having a few problems.  I can get everything to compile, but it seems
>repl is being generated corrupt.  When I run repl, it comes back segmentation
>fault.  I have tried recompiling several times, only to reproduce the error.
[stuff deleted]
>--
>Lee Gates --  Living in the Land of Rain, Corvallis OR
>gatesl@mist.cs.orst.edu

I had the same problem.  After some digging and using the malloc
debugging library I found that the function replout (in the file
$DIST/uip/replsbr.c) is freeing some memory more than once.  It
appears that there are two loops (one while and one for) that both
free the same memory.  I just hacked out the while loop and it worked
ok.  I'm not sure this is the answer, but it works.

Here are the diffs between my hacked version and the virgin release
of $DIST/uip/replsbr.c:
69a70
> 
93a95
> /*    malloc_debug(2 + 4 + 8 + 16 + 32); */
105,106c107,108
<     for (i = ncomps; i--; )
< 	if ((*nxtbuf++ = malloc( SBUFSIZ )) == NULL)
---
>     for (i = ncomps; i--; ) {
> 	if (((*nxtbuf) = malloc( SBUFSIZ )) == NULL)
107a110,111
>       ++nxtbuf;
>       }
235,238c239,242
<     while ( cptr = *savecomp++ )
< 	free (cptr->c_text);
<     for (nxtbuf = compbuffers, i = ncomps; i--; )
<         free (*nxtbuf++);
---
> /*    while ( cptr = *savecomp++ ) {
> 	myfree (cptr->c_text,0); } */
>     for (nxtbuf = compbuffers, i = ncomps; i--; ) 
>         free(*nxtbuf++); 

It works fine for me.  Also, here's my MH file from the conf directory:
# @(#)$Id: MH,v 1.7 90/04/06 09:44:31 sources Exp $
# a 4.2BSD VAX system running SendMail
bin	/usr/local/lib/mh
bboards nntp
etc	/usr/local/lib/mh
mail	/usr/spool/mail
manuals	local
mts	sendmail/smtp
ccoptions -D__STRICT_BSD__
ldoptions 
ranlib on
options	BSD42 BERK BIND MHE NFS
options WHATNOW 

Note, I turned the optimizer off as Glenn Reid suggested, but I'm not sure
that this made any difference. I'm working on that.

ian

iansmith@warhol.gatech.edu
--
"Daddy what's regret?"
"Well son, all I can say is its always better to regret something you have
done, than to regret something you haven't done. And, if you see you mother
this afternoon..."  --Gibby