Re: [HACKERS] ERROR: infinite recursion in proc_exit

Bruce Momjian <maillist@candle.pha.pa.us>

From: Bruce Momjian <maillist@candle.pha.pa.us>
To: Massimo Dal Zotto <dz@cs.unitn.it>
Cc: PostgreSQL Hackers <hackers@postgreSQL.org>, Tom Lane <tgl@sss.pgh.pa.us>
Date: 1999-11-06T16:57:38Z
Lists: pgsql-hackers
> > 
> > Hmm.  If that trace is from 6.5 code, then postgres.c should certainly
> > be calling proc_exit after the recv() fails.  I wonder if proc_exit is
> > returning because proc_exit_inprogress is nonzero?  proc_exit's use of
> > elog(ERROR) does look mighty bogus to me --- that path could possibly
> > cause a recursion just like this, but how did the code get into it to
> > begin with?
> 
> The proc_exit_inprogress stuff was added by me after I found some backends
> doing exactly that sort of infinite recursion after a socket recv error.
> It doesn't correct the original error but at least il will exit the backend
> after 10 iterations. The elog(ERROR) might be bogus in this context, but how
> can you otherwise notify the error? Maybe a better solution could be this:
> 
> 	if (proc_exit_inprogress++ == 9)
> 		elog(ERROR, "infinite recursion in proc_exit");
> 	if (proc_exit_inprogress >= 9)
> 		goto exit;


Fix applied:

    /*
     * If proc_exit is called too many times something bad is happening, so
     * exit immediately.  This is crafted in two if's for a reason.
     */
    if (proc_exit_inprogress == 9)
        elog(ERROR, "infinite recursion in proc_exit");
    if (proc_exit_inprogress >= 9)
        goto exit;


-- 
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026