daemon.c File Reference

The daemon consists of global settings and a number of workers. More...

#include "config.h"
#include "daemon/daemon.h"
#include "daemon/worker.h"
#include "daemon/remote.h"
#include "daemon/acl_list.h"
#include "util/log.h"
#include "util/config_file.h"
#include "util/data/msgreply.h"
#include "util/storage/slabhash.h"
#include "services/listen_dnsport.h"
#include "services/cache/rrset.h"
#include "services/cache/infra.h"
#include "services/localzone.h"
#include "services/modstack.h"
#include "util/module.h"
#include "util/random.h"
#include "util/tube.h"
#include <signal.h>

Functions

static RETSIGTYPE record_sigh (int sig)
 used when no other sighandling happens, so we don't die when multiple signals in quick succession are sent to us.
static void signal_handling_record ()
 Signal handling during the time when netevent is disabled.
static void signal_handling_playback (struct worker *wrk)
 Replay old signals.
struct daemondaemon_init ()
 Initialize daemon structure.
int daemon_open_shared_ports (struct daemon *daemon)
 Open shared listening ports (if needed).
static void daemon_setup_modules (struct daemon *daemon)
 Setup modules.
int daemon_get_shufport (struct daemon *daemon, int *shufport)
 Obtain allowed port numbers, concatenate the list, and shuffle them (ready to be handed out to threads).
static void daemon_create_workers (struct daemon *daemon)
 Allocate empty worker structures.
void close_other_pipes (struct daemon *daemon, int thr)
 Close all pipes except for the numbered thread.
static void * thread_start (void *arg)
 Function to start one thread.
static void daemon_start_others (struct daemon *daemon)
 Fork and init the other threads.
static void daemon_stop_others (struct daemon *daemon)
 Stop the other threads.
void daemon_fork (struct daemon *daemon)
 Fork workers and start service.
void daemon_cleanup (struct daemon *daemon)
 Close off the worker thread information.
void daemon_delete (struct daemon *daemon)
 Delete workers, close listening ports.
void daemon_apply_cfg (struct daemon *daemon, struct config_file *cfg)
 Apply config settings.

Variables

static int sig_record_quit = 0
 How many quit requests happened.
static int sig_record_reload = 0
 How many reload requests happened.


Detailed Description

The daemon consists of global settings and a number of workers.


Function Documentation

static RETSIGTYPE record_sigh ( int  sig  )  [static]

used when no other sighandling happens, so we don't die when multiple signals in quick succession are sent to us.

Parameters:
sig,: signal number.
Returns:
signal handler return type (void or int).

References log_err(), sig_record_quit, sig_record_reload, VERB_OPS, and verbose().

Referenced by signal_handling_record().

static void signal_handling_record (  )  [static]

Signal handling during the time when netevent is disabled.

Stores signals to replay later.

References log_err(), and record_sigh().

Referenced by daemon_cleanup(), and daemon_init().

static void signal_handling_playback ( struct worker wrk  )  [static]

Replay old signals.

Parameters:
wrk,: worker that handles signals.

References sig_record_quit, sig_record_reload, and worker_sighandler().

Referenced by daemon_fork().

struct daemon* daemon_init (  )  [read]

int daemon_open_shared_ports ( struct daemon daemon  ) 

Open shared listening ports (if needed).

The cfg member pointer must have been set for the daemon.

Parameters:
daemon,: the daemon.
Returns:
: false on error.

References daemon::cfg, config_file::control_port, daemon_remote_open_ports(), daemon::listening_port, listening_ports_free(), listening_ports_open(), log_assert, config_file::port, daemon::ports, daemon::rc_port, daemon::rc_ports, and config_file::remote_control_enable.

Referenced by run_daemon(), and service_init().

static void daemon_setup_modules ( struct daemon daemon  )  [static]

int daemon_get_shufport ( struct daemon daemon,
int *  shufport 
)

Obtain allowed port numbers, concatenate the list, and shuffle them (ready to be handed out to threads).

Parameters:
daemon,: the daemon. Uses rand and cfg.
shufport,: the portlist output.
Returns:
number of ports available.

References daemon::cfg, fatal_exit(), config_file::outgoing_avail_ports, daemon::rand, and ub_random().

Referenced by daemon_create_workers().

static void daemon_create_workers ( struct daemon daemon  )  [static]

Allocate empty worker structures.

With backptr and thread-number, from 0..numthread initialised. Used as user arguments to new threads. Creates the daemon random generator if it does not exist yet. The random generator stays existing between reloads with a unique state.

Parameters:
daemon,: the daemon with (new) config settings.

References daemon::cfg, daemon_get_shufport(), fatal_exit(), log_assert, daemon::num, config_file::num_threads, daemon::rand, ub_initstate(), VERB_ALGO, verbose(), worker_create(), and daemon::workers.

Referenced by daemon_fork().

void close_other_pipes ( struct daemon daemon,
int  thr 
)

Close all pipes except for the numbered thread.

Parameters:
daemon,: daemon to close pipes in.
thr,: thread number 0..num-1 of thread to skip.

References worker::cmd, daemon::num, tube_close_read(), tube_delete(), and daemon::workers.

Referenced by thread_start().

static void* thread_start ( void *  arg  )  [static]

Function to start one thread.

Parameters:
arg,: user argument.
Returns:
: void* user return value could be used for thread_join results.

References daemon::cfg, close_other_pipes(), worker::cmd, worker::daemon, fatal_exit(), log_thread_set(), daemon::ports, worker::thread_num, tube_close_write(), ub_thread_blocksigs(), worker_init(), and worker_work().

Referenced by daemon_start_others().

static void daemon_start_others ( struct daemon daemon  )  [static]

Fork and init the other threads.

Main thread returns for special handling.

Parameters:
daemon,: the daemon with other threads to fork.

References worker::cmd, log_assert, daemon::num, worker::thr_id, thread_start(), tube_close_read(), VERB_ALGO, verbose(), and daemon::workers.

Referenced by daemon_fork().

static void daemon_stop_others ( struct daemon daemon  )  [static]

Stop the other threads.

Parameters:
daemon,: the daemon with other threads.

References log_assert, daemon::num, worker::thr_id, VERB_ALGO, verbose(), worker_cmd_quit, worker_send_cmd(), and daemon::workers.

Referenced by daemon_fork().

void daemon_fork ( struct daemon daemon  ) 

void daemon_cleanup ( struct daemon daemon  ) 

void daemon_delete ( struct daemon daemon  ) 

void daemon_apply_cfg ( struct daemon daemon,
struct config_file cfg 
)


Variable Documentation

int sig_record_quit = 0 [static]

How many quit requests happened.

Referenced by record_sigh(), and signal_handling_playback().

int sig_record_reload = 0 [static]

How many reload requests happened.

Referenced by record_sigh(), and signal_handling_playback().


Generated on Tue Oct 13 06:45:49 2009 for unbound by  doxygen 1.5.9