diff --git a/src/bin/psql/psql.c b/src/bin/psql/psql.c
index 486e07f331e40c9b85b79ca49dae21a2d1d57291..7fa71a3b98ae7dd17b5eeefd53f1ce0a8a523648 100644
--- a/src/bin/psql/psql.c
+++ b/src/bin/psql/psql.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.63 1997/05/23 00:20:20 momjian Exp $
+ *    $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.64 1997/05/23 01:53:42 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -837,6 +837,7 @@ do_connect(const char *new_dbname,
     else {
 	PGconn          *olddb = settings->db;
 	static char	*userenv = NULL;
+	char		*old_userenv = NULL;
 
 	printf("closing connection to database: %s\n", dbname);
 	if (new_user != NULL) {
@@ -845,10 +846,14 @@ do_connect(const char *new_dbname,
 		   so we have to do it via PGUSER
 		*/
 	    if (userenv != NULL)
-	    	free(userenv);
+	    	old_userenv = userenv;
 	    userenv = malloc(strlen("PGUSER=") + strlen(new_user) + 1);
 	    sprintf(userenv,"PGUSER=%s",new_user);
-	    putenv(userenv); /*Solaris putenv() continues to use memory in env*/
+	    /* putenv() may continue to use memory as part of environment */
+	    putenv(userenv);
+	    /* can delete old memory if we malloc'ed it */
+	    if (old_userenv != NULL)
+	    	free(old_userenv);
 	}
 	settings->db = PQsetdb(PQhost(olddb), PQport(olddb),
 			       NULL, NULL, new_dbname);