From 3a84f5c0b84637705911e2e412afaac38f06dfb8 Mon Sep 17 00:00:00 2001 From: "Stephen R. van den Berg" <srb@cuci.nl> Date: Thu, 18 Feb 2016 10:51:40 +0100 Subject: [PATCH] pgsql: Catch destruct races. --- lib/modules/Sql.pmod/pgsql.pike | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike index 49dc9100ac..7f8ac1b4b1 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); } -- GitLab