Re: [BUGS] bug in postgresql-v6.4 on FreeBSD

Started by Tatsuo Ishiiabout 27 years ago2 messages
#1Tatsuo Ishii
t-ishii@sra.co.jp

here is a bug which is reproducible on FreeBSD-2.2.6
as well as on FreeBSD-2.2.7:

nadia:mergl> echo -n "testing large objects using blob_read" >/tmp/gaga
nadia:mergl> createdb pgtest
nadia:mergl> psql pgtest
...
pgtest=> CREATE TABLE lobject ( id int4, loid oid );
CREATE
pgtest=> INSERT INTO lobject (id, loid) VALUES (1, lo_import('/tmp/gaga'));
pqReadData() -- backend closed the channel unexpectedly.
This probably means the backend terminated abnormally before or while processing the request.
We have lost the connection to the backend, so further processing is impossible. Terminating.

Reproduced here too. Please try included patches...

Tatsuo Ishii
t-ishii@sra.co.jp
---------------------------------------------------------------------------
*** postgresql-v6.4/src/backend/storage/large_object/inv_api.c~	Thu Nov  5 17:48:26 1998
--- postgresql-v6.4/src/backend/storage/large_object/inv_api.c	Thu Nov 12 15:52:59 1998
***************
*** 549,556 ****
  				tuplen = inv_wrnew(obj_desc, buf, nbytes - nwritten);
  			else
  				tuplen = inv_wrold(obj_desc, buf, nbytes - nwritten, tuple, buffer);
  		}
! 		ReleaseBuffer(buffer);
  		/* move pointers past the amount we just wrote */
  		buf += tuplen;
--- 549,557 ----
  				tuplen = inv_wrnew(obj_desc, buf, nbytes - nwritten);
  			else
  				tuplen = inv_wrold(obj_desc, buf, nbytes - nwritten, tuple, buffer);
+ 			ReleaseBuffer(buffer);
  		}
! 

/* move pointers past the amount we just wrote */
buf += tuplen;

#2Edmund Mergl
E.Mergl@bawue.de
In reply to: Tatsuo Ishii (#1)
Re: [HACKERS] Re: [BUGS] bug in postgresql-v6.4 on FreeBSD

Tatsuo Ishii wrote:

here is a bug which is reproducible on FreeBSD-2.2.6
as well as on FreeBSD-2.2.7:

nadia:mergl> echo -n "testing large objects using blob_read" >/tmp/gaga
nadia:mergl> createdb pgtest
nadia:mergl> psql pgtest
...
pgtest=> CREATE TABLE lobject ( id int4, loid oid );
CREATE
pgtest=> INSERT INTO lobject (id, loid) VALUES (1, lo_import('/tmp/gaga'));
pqReadData() -- backend closed the channel unexpectedly.
This probably means the backend terminated abnormally before or while processing the request.
We have lost the connection to the backend, so further processing is impossible. Terminating.

Reproduced here too. Please try included patches...

Tatsuo Ishii
t-ishii@sra.co.jp
---------------------------------------------------------------------------
*** postgresql-v6.4/src/backend/storage/large_object/inv_api.c~ Thu Nov  5 17:48:26 1998
--- postgresql-v6.4/src/backend/storage/large_object/inv_api.c  Thu Nov 12 15:52:59 1998
***************
*** 549,556 ****
tuplen = inv_wrnew(obj_desc, buf, nbytes - nwritten);
else
tuplen = inv_wrold(obj_desc, buf, nbytes - nwritten, tuple, buffer);
}
!               ReleaseBuffer(buffer);
/* move pointers past the amount we just wrote */
buf += tuplen;
--- 549,557 ----
tuplen = inv_wrnew(obj_desc, buf, nbytes - nwritten);
else
tuplen = inv_wrold(obj_desc, buf, nbytes - nwritten, tuple, buffer);
+                       ReleaseBuffer(buffer);
}
!

/* move pointers past the amount we just wrote */
buf += tuplen;

yes, this patch works also for me.
It is needed to pass 'make test' for DBD-Pg-0.89.

thanks
Edmund
--
Edmund Mergl mailto:E.Mergl@bawue.de
Im Haldenhau 9 http://www.bawue.de/~mergl
70565 Stuttgart fon: +49 711 747503
Germany