Commit a0624736 authored by Tom Lane's avatar Tom Lane

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.
parent b32cac80
...@@ -3,7 +3,7 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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[]) ...@@ -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
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment