diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike index 49dc9100ac3b19047466c0730a066dde9fbbda1c..7f8ac1b4b1bdda9597d2a768a92b6968dffa44ee 100644 --- a/lib/modules/Sql.pmod/pgsql.pike +++ b/lib/modules/Sql.pmod/pgsql.pike @@ -1182,18 +1182,20 @@ private void procmessage() { return; } PD("Closing database processloop %O\n",err); - _delayederror=err; - for(;objectp(portal);portal=qportals->read()) - if(objectp(portal)) { + catch { // Cater for destruct races + _delayederror=err; + for(;objectp(portal);portal=qportals->read()) + if(objectp(portal)) { #ifdef PG_DEBUG - showportal(0); + showportal(0); #endif - portal->_purgeportal(); - } - if(!ci->close() && !terminating && _options.reconnect) - _connectfail(); - else - destruct(waitforauthready); + portal->_purgeportal(); + } + if(!ci->close() && !terminating && _options.reconnect) + _connectfail(); + else + destruct(waitforauthready); + }; if(err && !stringp(err)) throw(err); }