pike.git/
lib/
modules/
Sql.pmod/
pgsql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2017-11-15
2017-11-15 15:53:03 by Stephen R. van den Berg <srb@cuci.nl>
09206ed0d8b688689d7bfecd386c36dc6d9734e5 (
28
lines) (+
20
/-
8
)
[
Show
|
Annotate
]
Branch:
8.0
pgsql: Rip out fundamentally flawed reconnect logic, make failures consistent.
127:
looponce=0; if(lock=backendmux->trylock()) { PD("Starting local backend\n");
-
while (clientsregistered
)
{
// Autoterminate when not needed
+
while (clientsregistered
// Autoterminate when not needed
+
|| sizeof(local_backend->call_out_info())) {
mixed err; if (err = catch(local_backend(4096.0))) werror(describe_backtrace(err));
494:
socket->close(); }; }
-
connectfail=0;
+
catch(
connectfail
=
0
)
;
} final void connectloop(object pgsqlsess, int nossl) {
673:
int _portalbuffersize,int alltyped,array params,int forcetext, int _timeout, int _syncparse, int _transtype) { pgsqlsess = _pgsqlsess;
-
cr = (c = _c)->i;
+
if (catch(
cr = (c = _c)->i
))
+
losterror()
;
_query = query; datarows = Thread.Queue(); _ddescribe=Thread.Condition();
755:
return rowsreceived; }
-
private
inline
void trydelayederror() {
+
private
void
losterror() {
+
string err;
+
if (pgsqlsess)
+
err = pgsqlsess->error(1);
+
error("%s\n", err || "Database connection lost");
+
}
+
+
private
void trydelayederror() {
if(_delayederror) throwdelayederror(this);
-
+
else if (_state == PURGED)
+
losterror();
} //! @seealso
1133:
case PARSING: --pgsqlsess->_statementsinflight; }
-
_state=
CLOSED
;
+
_state
=
PURGED
;
lock=0; releaseconditions(); }
1214:
pgsqlsess=0; if(!datarowtypes) { Thread.MutexKey lock=_ddescribemux->lock();
-
datarowtypes
=
emptyarray;
-
datarowdesc
=emptyarray;
+
datarowdesc
=
datarowtypes
=
emptyarray;
_ddescribe->broadcast(); lock=0; }
1229:
conxsess plugbuffer; if (!catch(plugbuffer = c->start())) plugbuffer->sendcmd(_closeportal(plugbuffer));
-
_state=CLOSED;
+
if (
_state
< CLOSED)
+
_state
=
CLOSED;
datarows->write(1); // Signal EOF releaseconditions(); }