~ubuntu-branches/ubuntu/trusty/keepalived/trusty

« back to all changes in this revision

Viewing changes to keepalived/check/check_daemon.c

  • Committer: Bazaar Package Importer
  • Author(s): Didier Roche
  • Date: 2009-05-12 20:26:15 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090512202615-k850bw35qpuvpq4p
Tags: 1.1.17-1ubuntu1
* Merge from debian unstable, remaining changes:
  - debian/rules: DEB_UPDATE_RCD_PARAMS := expicit init start/stop
    parameters (don't stop at 0 and 6)
  - debian/init.d: init script header adapted to stop rule
  - debian/keepalived.postinst: Remove shutdown and reboot links

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
 *
6
6
 * Part:        Healthcheckrs child process handling.
7
7
 *
8
 
 * Version:     $Id: check_daemon.c,v 1.1.15 2007/09/15 04:07:41 acassen Exp $
 
8
 * Version:     $Id: check_daemon.c,v 1.1.17 2009/03/05 01:31:12 acassen Exp $
9
9
 *
10
10
 * Author:      Alexandre Cassen, <acassen@linux-vs.org>
11
11
 *
19
19
 *              as published by the Free Software Foundation; either version
20
20
 *              2 of the License, or (at your option) any later version.
21
21
 *
22
 
 * Copyright (C) 2001-2007 Alexandre Cassen, <acassen@freebox.fr>
 
22
 * Copyright (C) 2001-2009 Alexandre Cassen, <acassen@freebox.fr>
23
23
 */
24
24
 
25
25
#include "check_daemon.h"
33
33
#include "pidfile.h"
34
34
#include "daemon.h"
35
35
#include "signals.h"
 
36
#include "logger.h"
36
37
#include "list.h"
37
38
#include "main.h"
38
39
#include "memory.h"
40
41
#include "vrrp_netlink.h"
41
42
#include "vrrp_if.h"
42
43
 
 
44
extern char *checkers_pidfile;
 
45
 
43
46
/* Daemon stop sequence */
44
47
static void
45
48
stop_check(void)
46
49
{
47
50
        /* Destroy master thread */
 
51
        signal_handler_destroy();
48
52
        thread_destroy_master(master);
49
53
        free_checkers_queue();
50
54
        free_ssl();
53
57
        ipvs_stop();
54
58
 
55
59
        /* Stop daemon */
56
 
        pidfile_rm(CHECKERS_PID_FILE);
 
60
        pidfile_rm(checkers_pidfile);
57
61
 
58
62
        /* Clean data */
59
63
        free_global_data(data);
96
100
        }
97
101
 
98
102
        /* Post initializations */
99
 
        syslog(LOG_INFO, "Configuration is using : %lu Bytes", mem_allocated);
 
103
        log_message(LOG_INFO, "Configuration is using : %lu Bytes", mem_allocated);
100
104
 
101
105
        /* SSL load static data & initialize common ctx context */
102
106
        if (!init_ssl_ctx()) {
159
163
 
160
164
/* Reload handler */
161
165
void
162
 
sighup_check(int sig)
 
166
sighup_check(void *v, int sig)
163
167
{
164
 
        syslog(LOG_INFO, "Reloading Healthchecker child processi(%d) on signal",
 
168
        log_message(LOG_INFO, "Reloading Healthchecker child processi(%d) on signal",
165
169
               checkers_child);
166
170
        thread_add_event(master, reload_check_thread, NULL, 0);
167
171
}
168
172
 
169
173
/* Terminate handler */
170
174
void
171
 
sigend_check(int sig)
 
175
sigend_check(void *v, int sig)
172
176
{
173
 
        syslog(LOG_INFO, "Terminating Healthchecker child process on signal");
 
177
        log_message(LOG_INFO, "Terminating Healthchecker child process on signal");
174
178
        if (master)
175
179
                thread_add_terminate_event(master);
176
180
}
180
184
check_signal_init(void)
181
185
{
182
186
        signal_handler_init();
183
 
        signal_set(SIGHUP, sighup_check);
184
 
        signal_set(SIGINT, sigend_check);
185
 
        signal_set(SIGTERM, sigend_check);
 
187
        signal_set(SIGHUP, sighup_check, NULL);
 
188
        signal_set(SIGINT, sigend_check, NULL);
 
189
        signal_set(SIGTERM, sigend_check, NULL);
186
190
        signal_ignore(SIGPIPE);
187
 
        signal_noignore_sigchld();
188
191
}
189
192
 
190
193
/* CHECK Child respawning thread */
204
207
        }
205
208
 
206
209
        /* We catch a SIGCHLD, handle it */
207
 
        syslog(LOG_INFO, "Healthcheck child process(%d) died: Respawning", pid);
 
210
        log_message(LOG_INFO, "Healthcheck child process(%d) died: Respawning", pid);
208
211
        start_check_child();
209
212
        return 0;
210
213
}
217
220
 
218
221
        /* Dont start if pid is already running */
219
222
        if (checkers_running()) {
220
 
                syslog(LOG_INFO, "Healthcheck child process already running");
 
223
                log_message(LOG_INFO, "Healthcheck child process already running");
221
224
                return -1;
222
225
        }
223
226
 
226
229
        pid = fork();
227
230
 
228
231
        if (pid < 0) {
229
 
                syslog(LOG_INFO, "Healthcheck child process: fork error(%s)"
 
232
                log_message(LOG_INFO, "Healthcheck child process: fork error(%s)"
230
233
                               , strerror(errno));
231
234
                return -1;
232
235
        } else if (pid) {
233
236
                checkers_child = pid;
234
 
                syslog(LOG_INFO, "Starting Healthcheck child process, pid=%d"
 
237
                log_message(LOG_INFO, "Starting Healthcheck child process, pid=%d"
235
238
                               , pid);
236
239
 
237
240
                /* Start respawning thread */
245
248
                (log_facility==LOG_DAEMON) ? LOG_LOCAL2 : log_facility);
246
249
 
247
250
        /* Child process part, write pidfile */
248
 
        if (!pidfile_write(CHECKERS_PID_FILE, getpid())) {
249
 
                syslog(LOG_INFO, "Healthcheck child process: cannot write pidfile");
 
251
        if (!pidfile_write(checkers_pidfile, getpid())) {
 
252
                log_message(LOG_INFO, "Healthcheck child process: cannot write pidfile");
250
253
                exit(0);
251
254
        }
252
255
 
253
256
        /* Create the new master thread */
 
257
        signal_handler_destroy();
254
258
        thread_destroy_master(master);
255
259
        master = thread_make_master();
256
260