pike.git/
lib/
modules/
Sql.pmod/
pgsql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2017-11-15
2017-11-15 14:58:41 by Stephen R. van den Berg <srb@cuci.nl>
e1963eb3ec04af390004671d89f852e066fd8164 (
26
lines) (+
19
/-
7
)
[
Show
|
Annotate
]
Branch:
8.1
pgsql: Rip out fundamentally flawed reconnect logic, make failures consistent.
108:
looponce=0; if(lock=backendmux->trylock()) { PD("Starting local backend\n");
-
while (!clientsregistered->drained()
)
{
// Autoterminate when not needed
+
while (!clientsregistered->drained()
// Autoterminate when not needed
+
|| sizeof(local_backend->call_out_info())) {
mixed err; if (err = catch(local_backend(4096.0))) werror(describe_backtrace(err));
632:
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();
714:
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
1072:
case PARSING: stmtifkey = 0; }
-
_state=
CLOSED
;
+
_state
=
PURGED
;
lock=0; releaseconditions(); }
1151:
pgsqlsess=0; if(!datarowtypes) { Thread.MutexKey lock=_ddescribemux->lock();
-
datarowtypes
=
emptyarray;
-
datarowdesc
=emptyarray;
+
datarowdesc
=
datarowtypes
=
emptyarray;
_ddescribe->broadcast(); lock=0; }
1166:
conxsess plugbuffer; if (!catch(plugbuffer = c->start())) plugbuffer->sendcmd(_closeportal(plugbuffer));
-
_state=CLOSED;
+
if (
_state
< CLOSED)
+
_state
=
CLOSED;
datarows->write(1); // Signal EOF releaseconditions(); }