pike.git/
lib/
modules/
Sql.pmod/
pgsql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2014-11-14
2014-11-14 16:45:52 by Stephen R. van den Berg <srb@cuci.nl>
04f130a91f3880ef18821453e86709de9d0342c5 (
22
lines) (+
15
/-
7
)
[
Show
|
Annotate
]
Branch:
8.1
pgsql: Release all locks early upon error.
743:
} final void _purgeportal() {
-
_unnamedportalkey=0;
+
_unnamedportalkey=
_unnamedstatementkey=
0;
Thread.MutexKey lock=closemux->lock(); _fetchlimit=0; // disables further Executes switch(_state) {
754:
} _state=closed; lock=0;
+
releaseconditions();
} final sctype _closeportal(PGplugbuffer plugbuffer) {
768:
*/ switch(_state) { case portalinit:
+
_unnamedstatementkey=0;
_state=closed; break; case copyinprogress:
818:
} }
-
final
void
_releasesession
() {
-
_inflight
=0;
-
_datarows->write(1); // Signal EOF
-
PGassist plugbuffer=c->start(1);
-
plugbuffer->sendcmd(_closeportal(plugbuffer));
-
pgsqlsess=UNDEFINED;
+
private
void
releaseconditions
() {
+
pgsqlsess
=0;
Thread.MutexKey lock; if(prepbuffermux) { Thread.MutexKey lock=prepbuffermux->lock();
832:
if(!_datarowdesc) { lock=_ddescribemux->lock(); _ddescribe->broadcast();
+
_datarowdesc=({});
} lock=0; }
-
+
final void _releasesession() {
+
_inflight=0;
+
_datarows->write(1); // Signal EOF
+
PGassist plugbuffer=c->start(1);
+
plugbuffer->sendcmd(_closeportal(plugbuffer));
+
releaseconditions();
+
}
+
protected void destroy() { catch { // inside destructors, exceptions don't work _releasesession();