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: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() {