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:164:
final Thread.MutexKey started; final Thread.Mutex stashupdate; final Thread.Queue stashqueue; final Thread.Condition stashavail; final Stdio.Buffer stash; final int stashflushmode; final int stashcount; final int synctransact; #ifdef PG_DEBUG final int queueoutidx;
-
final int queueinidx;
+
final int queueinidx
=-1
;
#endif private inline void queueup(pgsql_result portal) { qportals->write(portal); portal->_synctransact=synctransact; PD(">%O %d %d Queue portal %d bytes\n",portal._portalname,++queueoutidx, synctransact,sizeof(this)); } final PGassist|PGplugbuffer start(void|int waitforreal) { Thread.MutexKey lock;
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:400:
private Thread.Condition prepbufferready; private Thread.Mutex prepbuffermux; final string _preparedname; final mapping(string:mixed) _tprepared; private string _sprintf(int type, void|mapping flags) { string res=UNDEFINED; switch(type) { case 'O': res=sprintf("pgsql_result numrows: %d eof: %d inflight: %d\n"
-
#ifdef PG_DEBUGMORE
+
"query: %O\n"
-
#endif
+
"portalname: %O datarows: %d" " laststatus: %s\n", numrows,eoffound,_inflight,
-
#ifdef PG_DEBUGMORE
+
_query,
-
#endif
+
_portalname,_datarowdesc&&sizeof(_datarowdesc), _statuscmdcomplete||""); break; } return res; } protected void create(object _pgsqlsess,PGassist _c,string query, int portalbuffersize,int alltyped,array params,int forcetext) { pgsqlsess = _pgsqlsess;
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:669:
Thread.Thread(gotdatarowdesc); // Do not use callout, it deadlocks if(tp) tp.datarowdesc=datarowdesc; } private void gotdatarowdesc() { if(!prepbuffer) { Thread.MutexKey lock=prepbuffermux->lock(); prepbufferready->wait(lock); lock=0;
+
if(_state==closed)
+
return;
+
prepbuffermux=0;
} Stdio.Buffer plugbuffer=prepbuffer; prepbuffer=0; plugbuffer->add_int16(sizeof(_datarowdesc)); foreach(_datarowdesc;;mapping col) plugbuffer->add_int16(oidformat(col.type)); PD("Bind portal %O statement %O\n",_portalname,_preparedname); _fetchlimit=pgsqlsess->_fetchlimit; _openportal(); PGassist bindbuffer=c->start(1);
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:768:
lock=0; } } final void _releasesession() { _inflight=0; _datarows->write(1); // Signal EOF PGassist plugbuffer=c->start(1); plugbuffer->sendcmd(_closeportal(plugbuffer)); pgsqlsess=UNDEFINED;
+
Thread.MutexKey lock;
+
if(prepbuffermux) {
+
Thread.MutexKey lock=prepbuffermux->lock();
+
prepbufferready->signal();
}
-
+
if(!_datarowdesc) {
+
lock=_ddescribemux->lock();
+
_ddescribe->broadcast();
+
}
+
lock=0;
+
}
protected void destroy() { catch { // inside destructors, exceptions don't work _releasesession(); }; } final void _sendexecute(int fetchlimit,void|PGplugbuffer plugbuffer) { int flushmode; PD("Execute portal %O fetchlimit %d\n",_portalname,fetchlimit);