mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Fix problems with coredumps due to ^C when longjmp buffer isn't valid.
Now, we will only catch ^C at times when it is valid.
This commit is contained in:
		@@ -3,7 +3,7 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * Copyright 2000 by PostgreSQL Global Development Group
 | 
					 * Copyright 2000 by PostgreSQL Global Development Group
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * $Header: /cvsroot/pgsql/src/bin/psql/mainloop.c,v 1.37 2001/03/22 04:00:21 momjian Exp $
 | 
					 * $Header: /cvsroot/pgsql/src/bin/psql/mainloop.c,v 1.38 2001/03/23 00:36:38 tgl Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#include "postgres_fe.h"
 | 
					#include "postgres_fe.h"
 | 
				
			||||||
#include "mainloop.h"
 | 
					#include "mainloop.h"
 | 
				
			||||||
@@ -137,6 +137,10 @@ MainLoop(FILE *source)
 | 
				
			|||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* establish the control-C handler only after main_loop_jmp is ready */
 | 
				
			||||||
 | 
							pqsignal(SIGINT, handle_sigint);	/* control-C => cancel */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif	 /* not WIN32 */
 | 
					#endif	 /* not WIN32 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (slashCmdStatus == CMD_NEWEDIT)
 | 
							if (slashCmdStatus == CMD_NEWEDIT)
 | 
				
			||||||
@@ -546,7 +550,8 @@ MainLoop(FILE *source)
 | 
				
			|||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Process query at the end of file without a semicolon
 | 
						 * Process query at the end of file without a semicolon
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (query_buf->len > 0 && !pset.cur_cmd_interactive)
 | 
						if (query_buf->len > 0 && !pset.cur_cmd_interactive &&
 | 
				
			||||||
 | 
							successResult == EXIT_SUCCESS)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		success = SendQuery(query_buf->data);
 | 
							success = SendQuery(query_buf->data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -556,6 +561,14 @@ MainLoop(FILE *source)
 | 
				
			|||||||
			successResult = EXIT_BADCONN;
 | 
								successResult = EXIT_BADCONN;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*
 | 
				
			||||||
 | 
						 * Reset SIGINT handler because main_loop_jmp will be invalid as soon
 | 
				
			||||||
 | 
						 * as we exit this routine.  If there is an outer MainLoop instance,
 | 
				
			||||||
 | 
						 * it will re-enable ^C catching as soon as it gets back to the top
 | 
				
			||||||
 | 
						 * of its loop and resets main_loop_jmp to point to itself.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						pqsignal(SIGINT, SIG_DFL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	destroyPQExpBuffer(query_buf);
 | 
						destroyPQExpBuffer(query_buf);
 | 
				
			||||||
	destroyPQExpBuffer(previous_buf);
 | 
						destroyPQExpBuffer(previous_buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * Copyright 2000 by PostgreSQL Global Development Group
 | 
					 * Copyright 2000 by PostgreSQL Global Development Group
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.45 2001/03/22 04:00:23 momjian Exp $
 | 
					 * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.46 2001/03/23 00:36:38 tgl Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#include "postgres_fe.h"
 | 
					#include "postgres_fe.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -223,10 +223,6 @@ main(int argc, char *argv[])
 | 
				
			|||||||
	SetVariable(pset.vars, "PORT", PQport(pset.db));
 | 
						SetVariable(pset.vars, "PORT", PQport(pset.db));
 | 
				
			||||||
	SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding));
 | 
						SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef WIN32
 | 
					 | 
				
			||||||
	pqsignal(SIGINT, handle_sigint);	/* control-C => cancel */
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Now find something to do
 | 
						 * Now find something to do
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user