pike.git/
lib/
modules/
Sql.pmod/
pgsql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2016-02-25
2016-02-25 12:12:21 by Stephen R. van den Berg <srb@cuci.nl>
fe85abf2fea9ad86340c68150f239973085ea307 (
14
lines) (+
7
/-
7
)
[
Show
|
Annotate
]
Branch:
8.0
pgsql: Delay close always to avoid thread races in destructed objects.
340:
final int close() { int ret;
-
{ Thread.MutexKey lock=i->fillreadmux->lock();
+
if(!termlock && nostash)
+
{
termlock=termthread->lock();
+
Thread.MutexKey lock=i->fillreadmux->lock();
if(i->fillread) { // Delayed close() after flushing the output buffer i->fillread.signal(); i->fillread=0;
-
+
}
lock=0;
-
PD("%d>
Close
socket read
, flush write\n",socket->query_fd());
-
ret=socket->close("r");
+
PD("%d>
Delayed
close
, flush write\n",socket->query_fd());
i->read_cb(socket->query_id(),0); return ret; }
-
lock=0;
-
}
+
destruct(nostash); PD("%d>Close socket\n",socket->query_fd()); ret=socket->close();
363:
} protected void destroy() {
-
termlock=termthread->lock();
+
catch(close()); // Exceptions don't work inside destructors connectfail=0; termthread->lock(1);