diff --git a/lib/modules/Sql.pmod/pgsql.h b/lib/modules/Sql.pmod/pgsql.h index d0b31cbf28f167ba3919522d2547d8418ad22c62..b8056f277e0ba76ea1ffd60ddc1e0f4bafd4ba63 100644 --- a/lib/modules/Sql.pmod/pgsql.h +++ b/lib/modules/Sql.pmod/pgsql.h @@ -72,7 +72,7 @@ #ifdef PG_DEBUG #define PD(X ...) werror(X) // PT() puts this in the backtrace -#define PT(X ...) (lambda(object _this){return (X);}(this)) +#define PT(X ...) (lambda(object _this){(X);}(this)) #else #undef PG_DEBUGMORE #define PD(X ...) 0 diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike index 3661637f8962bf2cfc8619eba1bb15012b093ff4..30c93353f0a8f1a1b5fe6732c4e3cfd4c956092f 100644 --- a/lib/modules/Sql.pmod/pgsql.pike +++ b/lib/modules/Sql.pmod/pgsql.pike @@ -313,7 +313,7 @@ private .pgsql_util.conxion getsocket(void|int nossl) { //! through the generic SQL-interface. /*semi*/final void cancelquery() { PD("CancelRequest\n"); - .pgsql_util.conxion lcon=getsocket(1); + .pgsql_util.conxion lcon=getsocket(2); lcon->add_int32(16)->add_int32(PG_PROTOCOL(1234,5678)) ->add_int32(backendpid)->add(cancelsecret)->sendcmd(FLUSHSEND); lcon=0; @@ -617,6 +617,7 @@ final void _processloop(.pgsql_util.conxion ci) { _connectfail(); else destruct(waitforauthready); + unnamedstatement=0; termlock=0; return; } @@ -625,10 +626,11 @@ final void _processloop(.pgsql_util.conxion ci) { } private void procmessage() { + mixed err; int terminating=0; + err = catch { .pgsql_util.conxion ci=c; // cache value FIXME sensible? .pgsql_util.conxiin cr=ci->i; // cache value FIXME sensible? - mixed err; #ifdef PG_DEBUG PD("Processloop\n"); @@ -1190,6 +1192,12 @@ private void procmessage() { termlock=0; if(err && !stringp(err)) throw(err); + }; + if (err) { + unnamedstatement=0; + termlock = 0; + throw(err); + } } //! Closes the connection to the database, any running queries are @@ -1201,9 +1209,11 @@ private void procmessage() { /*semi*/final void close() { if(qportals && qportals->size()) catch(cancelquery()); - termlock=unnamedstatement->lock(1); + if (unnamedstatement) + termlock=unnamedstatement->lock(1); c->close(); - unnamedstatement->lock(1); + if (unnamedstatement) + unnamedstatement->lock(1); destruct(c);destruct(waitforauthready); } diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index f30e388b9999571473221694ac12112ee20fc1f2..2eaec13420b7e7fcc956e24b97463ca8db00a999 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -208,7 +208,11 @@ class conxiin { } final int read_cb(mixed id,mixed b) { - PD("Read callback %O\n",(string)b); + PD("Read callback %O\n",((string)b) +#ifndef PG_DEBUGMORE + [..255] +#endif + ); Thread.MutexKey lock=fillreadmux->lock(); if(procmsg&&id) procmsg=0,lock=0,Thread.Thread(id); @@ -411,8 +415,10 @@ outer: socket->set_backend(local_backend); socket->set_buffer_mode(i,0); socket->set_nonblocking(i->read_cb,write_cb,close); - connectfail=pgsqlsess->_connectfail; - Thread.Thread(pgsqlsess->_processloop,this); + if (nossl != 2) { + connectfail=pgsqlsess->_connectfail; + Thread.Thread(pgsqlsess->_processloop,this); + } return; }; catch(connectfail(err));