Re: [HACKERS] ERROR: infinite recursion in proc_exit
От | Bruce Momjian |
---|---|
Тема | Re: [HACKERS] ERROR: infinite recursion in proc_exit |
Дата | |
Msg-id | 199911061657.LAA01966@candle.pha.pa.us обсуждение исходный текст |
Ответ на | Re: [HACKERS] ERROR: infinite recursion in proc_exit (Massimo Dal Zotto <dz@cs.unitn.it>) |
Ответы |
Re: [HACKERS] ERROR: infinite recursion in proc_exit
|
Список | 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 intwo 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, Pennsylvania19026
В списке pgsql-hackers по дате отправления: