pike.git / lib / modules / Sql.pmod / pgsql_util.pmod

version» Context lines:

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);