2014-11-13
2014-11-13 14:39:04 by Stephen R. van den Berg <srb@cuci.nl>
-
cbe52f00cbb25b0be95a9626f5f412ec1a90f63a
(20 lines)
(+15/-5)
[
Show
| Annotate
]
Branch: 8.0
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