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

version» Context lines:

pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:682:    case INT2OID:    plugbuffer->add_int32(2)->add_int16((int)value);    break;    }    }    if(_tprepared)    if(_tprepared.datarowdesc)    prepbuffer=plugbuffer, gotdatarowdesc();    else if(dontcacheprefix->match(_query)) // Don't cache FETCH/COPY    m_delete(pgsqlsess->_prepareds,_query),_tprepared=0; -  Thread.MutexKey lock; -  if(!prepbuffer && !catch(lock=prepbuffermux->lock())) { +  if(!prepbuffer) { +  Thread.MutexKey lock=prepbuffermux->lock();    prepbuffer=plugbuffer; -  prepbufferready->signal(); +  catch(prepbufferready->signal());    lock=0;    }    }       final void _processrowdesc(array(mapping(string:mixed)) datarowdesc) {    _setrowdesc(datarowdesc);    mapping(string:mixed) tp=_tprepared; // FIXME Is caching this worthwhile?    if(!tp || !tp.datarowdesc)    Thread.Thread(gotdatarowdesc); // Do not use callout, it deadlocks    if(tp)    tp.datarowdesc=datarowdesc;    }       private void gotdatarowdesc() { -  Thread.MutexKey lock; -  if(catch(lock=prepbuffermux->lock())) -  return; +  Thread.MutexKey lock=prepbuffermux->lock();    if(!prepbuffer) -  prepbufferready->wait(lock); -  destruct(prepbuffermux); +  catch(prepbufferready->wait(lock)); +  destruct(prepbufferready);    lock=0;    if(_state==CLOSED)    return;    Stdio.Buffer plugbuffer=prepbuffer;    prepbuffer=0; // Free memory early    plugbuffer->add_int16(sizeof(_datarowdesc));    if(sizeof(_datarowdesc))    foreach(_datarowdesc;;mapping col)    plugbuffer->add_int16(oidformat(col.type));    else if(commitprefix->match(_query)) {
pike.git/lib/modules/Sql.pmod/pgsql_util.pmod:829:    else if(!_fetchlimit)    PD("<%O _fetchlimit %d, _inflight %d, skip execute\n",    _portalname,_fetchlimit,_inflight);    lock=0;    }    }       private void releaseconditions() {    pgsqlsess=0;    Thread.MutexKey lock; -  if(prepbuffermux) { +  if(prepbufferready) {    Thread.MutexKey lock=prepbuffermux->lock(); -  prepbufferready->signal(); +  catch(prepbufferready->signal());    }    if(!_datarowdesc) {    lock=_ddescribemux->lock();    _datarowdesc=({});    _ddescribe->broadcast();    }    lock=0;    }       final void _releasesession() {