From 6458daa180586f9e49e67cfa4136094d139da950 Mon Sep 17 00:00:00 2001
From: Tatsuo Ishii <ishii@postgresql.org>
Date: Sun, 9 May 1999 15:00:18 +0000
Subject: [PATCH] Running lo_read/lo_write under different memory context cause
 troubles. See Message-Id: <199905090312.MAA00466@ext16.sra.co.jp> for more
 details.

---
 src/backend/libpq/be-fsstubs.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c
index 2ac4db6330..dec9c7ad6a 100644
--- a/src/backend/libpq/be-fsstubs.c
+++ b/src/backend/libpq/be-fsstubs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.30 1999/05/09 00:54:30 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.31 1999/05/09 15:00:18 ishii Exp $
  *
  * NOTES
  *	  This should be moved to a more appropriate place.  It is here
@@ -131,6 +131,9 @@ lo_close(int fd)
 int
 lo_read(int fd, char *buf, int len)
 {
+ 	MemoryContext currentContext;
+ 	int status;
+
 	if (fd < 0 || fd >= MAX_LOBJ_FDS)
 	{
 		elog(ERROR, "lo_read: large obj descriptor (%d) out of range", fd);
@@ -141,13 +144,20 @@ lo_read(int fd, char *buf, int len)
 		elog(ERROR, "lo_read: invalid large obj descriptor (%d)", fd);
 		return -3;
 	}
+ 	currentContext = MemoryContextSwitchTo((MemoryContext) fscxt);
+
+	status = inv_read(cookies[fd], buf, len);
 
-	return inv_read(cookies[fd], buf, len);
+	MemoryContextSwitchTo(currentContext);
+ 	return(status);
 }
 
 int
 lo_write(int fd, char *buf, int len)
 {
+ 	MemoryContext currentContext;
+ 	int status;
+
 	if (fd < 0 || fd >= MAX_LOBJ_FDS)
 	{
 		elog(ERROR, "lo_write: large obj descriptor (%d) out of range", fd);
@@ -158,8 +168,12 @@ lo_write(int fd, char *buf, int len)
 		elog(ERROR, "lo_write: invalid large obj descriptor (%d)", fd);
 		return -3;
 	}
+ 	currentContext = MemoryContextSwitchTo((MemoryContext) fscxt);
+
+	status = inv_write(cookies[fd], buf, len);
 
-	return inv_write(cookies[fd], buf, len);
+	MemoryContextSwitchTo(currentContext);
+ 	return(status);
 }
 
 
-- 
2.50.1