Branch: Tag:

2014-11-13

2014-11-13 14:39:04 by Stephen R. van den Berg <srb@cuci.nl>

pgsql: Improve debugging output and release all locks upon error.

171: Inside #if defined(PG_DEBUG)
   final int synctransact;   #ifdef PG_DEBUG    final int queueoutidx; -  final int queueinidx; +  final int queueinidx=-1;   #endif       private inline void queueup(pgsql_result portal) {
407:    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;
676:    Thread.MutexKey lock=prepbuffermux->lock();    prepbufferready->wait(lock);    lock=0; +  if(_state==closed) +  return; +  prepbuffermux=0;    }    Stdio.Buffer plugbuffer=prepbuffer;    prepbuffer=0;
775:    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