pike.git/
lib/
modules/
Sql.pmod/
pgsql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2015-12-05
2015-12-05 21:47:28 by Stephen R. van den Berg <srb@cuci.nl>
7f73f414447a141597e3cdbd4473d23fdf01c92e (
25
lines) (+
14
/-
11
)
[
Show
|
Annotate
]
Branch:
8.1
pgsql: Terminate threads when connections are idle.
185:
final Thread.Condition fillread; final Thread.Mutex fillreadmux;
+
final int procmsg;
private int didreadcb; protected bool range_error(int howmuch) {
204:
} final int read_cb(mixed id,mixed b) {
+
PD("Read callback %O\n",(string)b);
Thread.MutexKey lock=fillreadmux->lock();
-
if(fillread)
+
if(
procmsg)
+
procmsg=0,lock=0,Thread.Thread(id);
+
else if(
fillread)
didreadcb=1, fillread.signal(); lock=0; return 0;
225:
private Thread.Queue qportals; final Thread.Mutex shortmux; final Stdio.File socket;
-
private
object
pgsqlsess
;
+
private
function(void|mixed:void)
connectfail
;
private int towrite; final Thread.Mutex nostash;
327:
return; }; lock=0;
-
if
(
pgsqlsess)
-
pgsqlsess->_
connectfail();
+
catch
(connectfail()
)
;
} final void sendterminate() {
349:
protected void destroy() { catch(close()); // Exceptions don't work inside destructors
-
pgsqlsess
=0;
+
connectfail
=0;
}
-
final void connectloop(int nossl) {
+
final void connectloop(
object pgsqlsess,
int nossl) {
mixed err=catch { for(;;clear()) { socket->connect(pgsqlsess._host,pgsqlsess._port);
392:
socket->set_backend(local_backend); socket->set_buffer_mode(i,0); socket->set_nonblocking(i->read_cb,write_cb,close);
+
connectfail=pgsqlsess->_connectfail;
Thread.Thread(pgsqlsess->_processloop,this); return; };
-
if
(
pgsqlsess)
-
pgsqlsess->_
connectfail(err);
+
catch
(connectfail(err)
)
;
} private string _sprintf(int type, void|mapping flags) {
413:
return res; }
-
protected void create(object
_
pgsqlsess,Thread.Queue _qportals,int nossl) {
+
protected void create(object pgsqlsess,Thread.Queue _qportals,int nossl) {
o::create(); qportals = _qportals; synctransact = 1;
424:
stashavail=Thread.Condition(); stashqueue=Thread.Queue(); stash=Stdio.Buffer();
-
pgsqlsess=_pgsqlsess;
-
Thread.Thread(connectloop,nossl);
+
Thread.Thread(connectloop,
pgsqlsess,
nossl);
} };