pike.git
/
lib
/
modules
/
Sql.pmod
/
pgsql_util.pmod
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:120:
} } private void run_local_backend() { Thread.MutexKey lock; int looponce; do { 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)); } PD("Terminating local backend\n"); lock=0; looponce=clientsregistered; } } while(looponce); }
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:487:
catch { while(sizeof(closecallbacks)) foreach(closecallbacks;function(void|mixed:void) closecb;) closecb(); destruct(nostash); socket->set_nonblocking(); // Drop all callbacks PD("%d>Close socket\n",socket->query_fd()); socket->close(); }; }
-
connectfail=0;
+
catch(
connectfail
=
0
)
;
} final void connectloop(object pgsqlsess, int nossl) { mixed err=catch { for(;;clear()) { socket->connect(pgsqlsess._host,pgsqlsess._port); #if constant(SSL.File) if(!nossl && !pgsqlsess->nossl && (pgsqlsess._options.use_ssl || pgsqlsess._options.force_ssl)) { PD("SSLRequest\n");
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:666:
statuscmdcomplete||(_unnamedstatementkey?"*parsing*":"")); break; } return res; } protected void create(object _pgsqlsess,conxion _c,string query, 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(); _ddescribemux=Thread.Mutex(); closemux=Thread.Mutex(); portalbuffersize=_portalbuffersize; alltext = !alltyped; _params = params; _forcetext = forcetext; _state = PORTALINIT;
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:748:
//! can still increase between subsequent calls if the results from //! the query are not complete yet. This function is only guaranteed to //! return the correct count after EOF has been reached. //! @seealso //! @[Sql.sql_result()->num_rows()] /*semi*/final int num_rows() { trydelayederror(); 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 //! @[Sql.sql_result()->eof()] /*semi*/final int eof() { trydelayederror(); return eoffound; } //! @seealso
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:1126:
case COPYINPROGRESS: case COMMITTED: case BOUND: --pgsqlsess->_portalsinflight; } switch(_state) { case BOUND: case PARSING: --pgsqlsess->_statementsinflight; }
-
_state=
CLOSED
;
+
_state
=
PURGED
;
lock=0; releaseconditions(); } final int _closeportal(conxsess cs) { object plugbuffer = CHAIN(cs); int retval=KEEP; PD("%O Try Closeportal %d\n",_portalname,_state); Thread.MutexKey lock=closemux->lock(); _fetchlimit=0; // disables further Executes
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:1207:
_portalname,_fetchlimit,inflight); lock=0; } } private void releaseconditions() { _unnamedportalkey=_unnamedstatementkey=0; pgsqlsess=0; if(!datarowtypes) { Thread.MutexKey lock=_ddescribemux->lock();
-
datarowtypes
=
emptyarray;
-
datarowdesc
=emptyarray;
+
datarowdesc
=
datarowtypes
=
emptyarray;
_ddescribe->broadcast(); lock=0; } } final void _releasesession(void|string statusccomplete) { c->closecallbacks-=(<destroy>); if(statusccomplete && !statuscmdcomplete) statuscmdcomplete=statusccomplete; inflight=0; conxsess plugbuffer; if (!catch(plugbuffer = c->start())) plugbuffer->sendcmd(_closeportal(plugbuffer));
-
_state=CLOSED;
+
if (
_state
< CLOSED)
+
_state
=
CLOSED;
datarows->write(1); // Signal EOF releaseconditions(); } protected void destroy() { catch { // inside destructors, exceptions don't work _releasesession(); }; }