diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod index e9f51da5f1930a03a926c7d8e1bb59246ee645a5..40881aa5fc8886d40691c132167b8945c9d75659 100644 --- a/lib/modules/Sql.pmod/pgsql_util.pmod +++ b/lib/modules/Sql.pmod/pgsql_util.pmod @@ -165,6 +165,7 @@ class conxiin { final Thread.Mutex fillreadmux; final function(:void) gottimeout; final int timeout; + private int didreadcb; protected bool range_error(int howmuch) { #ifdef PG_DEBUG @@ -174,8 +175,9 @@ class conxiin { if(fillread) { array cid=callout(gottimeout,timeout); Thread.MutexKey lock=fillreadmux->lock(); - if(howmuch>sizeof(this)) + if(!didreadcb) fillread.wait(lock); + didreadcb=0; lock=0; local_backend->remove_call_out(cid); } else @@ -186,7 +188,7 @@ class conxiin { final int read_cb(mixed id,mixed b) { Thread.MutexKey lock=fillreadmux->lock(); if(fillread) - fillread.signal(); + didreadcb=1, fillread.signal(); lock=0; return 0; }