pike.git/
lib/
modules/
Sql.pmod/
pgsql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2015-12-23
2015-12-23 16:20:14 by Stephen R. van den Berg <srb@cuci.nl>
3a1ed3e0645d6242abae1a45f8e16a86180c5397 (
23
lines) (+
17
/-
6
)
[
Show
|
Annotate
]
Branch:
8.0
pgsql: Tear down result objects if the connection breaks.
231:
final Stdio.File socket; private function(void|mixed:void) connectfail; private int towrite;
+
final multiset(function(void|mixed:void)) closecallbacks=(<>);
final Thread.Mutex nostash; final Thread.MutexKey started;
347:
PD("%d>Close socket\n",socket->query_fd()); ret=socket->close(); sendterminate();
+
foreach(closecallbacks;function(void|mixed:void) closecb;)
+
closecb();
+
closecallbacks=(<>);
return ret; } protected void destroy() {
-
catch
(close());
// Exceptions don't work inside destructors
-
socket->set_
nonblocking
(); // Clear all callbacks
+
catch
{
// Exceptions don't work inside destructors
+
close();
+
socket->set_
callbacks
(); // Clear all callbacks
+
};
connectfail=0; }
498:
_ddescribe=Thread.Condition(); _ddescribemux=Thread.Mutex(); closemux=Thread.Mutex();
+
c->closecallbacks+=(<destroy>);
portalbuffersize=_portalbuffersize; alltext = !alltyped; _params = params;
836:
if(pgsqlsess->_portalsinflight) { pgsqlsess->_waittocommit++; PD("Commit waiting for portals to finish\n");
-
PT(pgsqlsess->_readyforcommit->wait(lock));
+
catch(
PT(pgsqlsess->_readyforcommit->wait(lock))
)
;
pgsqlsess->_waittocommit--; } }
921:
if(!--pgsqlsess->_portalsinflight) { if(pgsqlsess->_waittocommit) { PD("Signal no portals in flight\n");
-
pgsqlsess->_readyforcommit->signal();
+
catch(
pgsqlsess->_readyforcommit->signal()
)
;
lockc=0; } else if(!alreadyfilled) pgsqlsess->_readyforquerycount++, retval=SYNCSEND;
969:
} final void _releasesession(void|string statusccomplete) {
+
c->closecallbacks-=(<destroy>);
if(statusccomplete && !statuscmdcomplete) statuscmdcomplete=statusccomplete; inflight=0;
-
+
catch {
conxion plugbuffer=c->start(1); plugbuffer->sendcmd(_closeportal(plugbuffer));
-
+
};
_state=CLOSED; datarows->write(1); // Signal EOF releaseconditions();