Wed Aug 4 05:17:41 PDT 2010
- Next message: [Slony1-patches] bug 118 patch
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Numerous instances were observed where the parent/watchdog slon instance
would exit on a SIGALRM. The various POSIX standards define rules about
what functions can be called by a signal handler. We suspect not following
these guidelines was part of the problem.
---
src/slon/slon.c | 15 ++-------------
1 files changed, 2 insertions(+), 13 deletions(-)
diff --git a/src/slon/slon.c b/src/slon/slon.c
index f3b5f2e..36eaf4a 100644
--- a/src/slon/slon.c
+++ b/src/slon/slon.c
@@ -861,11 +861,11 @@ SlonWatchdog(void)
}
slon_log(SLON_CONFIG, "slon: child terminated status: %d; pid: %d, current worker pid: %d\n", child_status, pid, slon_worker_pid);
- (void) alarm(0);
switch (watchdog_status)
{
case SLON_WATCHDOG_RESTART:
+ sleep(20);
(void) execvp(main_argv[0], main_argv);
slon_log(SLON_FATAL, "slon: cannot restart via execvp() - %s\n",
strerror(errno));
@@ -958,19 +958,8 @@ sighandler(int signo)
void
slon_terminate_worker()
{
-#ifndef WIN32 /* does not support in windows. */
- slon_log(SLON_INFO, "slon: notify worker process to shutdown\n");
+ (void) kill(slon_worker_pid, SIGKILL);
- if (pipewrite(sched_wakeuppipe[1], "p", 1) != 1)
- {
- slon_log(SLON_FATAL, "main: write to worker pipe failed -(%d) %s\n", errno, strerror(errno));
- (void) kill(slon_worker_pid, SIGKILL);
- slon_exit(-1);
- }
- (void) close(sched_wakeuppipe[0]);
- (void) close(sched_wakeuppipe[1]);
- (void) alarm(20);
-#endif
}
/* ----------
--
1.6.3.3
--------------000606050901080609030803
Content-Type: text/x-patch;
name="0002-Install-the-signal-handlers-after-the-fork.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename*0="0002-Install-the-signal-handlers-after-the-fork.patch"
- Next message: [Slony1-patches] bug 118 patch
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-patches mailing list