comparison src/os/unix/ngx_posix_init.c @ 210:00cafae0bdf1

nginx-0.0.1-2003-12-14-23:10:27 import
author Igor Sysoev <igor@sysoev.ru>
date Sun, 14 Dec 2003 20:10:27 +0000
parents 8dee38ea9117
children 679f60139863
comparison
equal deleted inserted replaced
209:e1c815be05ae 210:00cafae0bdf1
5 5
6 int ngx_max_sockets; 6 int ngx_max_sockets;
7 int ngx_inherited_nonblocking; 7 int ngx_inherited_nonblocking;
8 8
9 9
10 void ngx_signal_handler(int signo);
11 void ngx_exit_signal_handler(int signo);
10 void ngx_restart_signal_handler(int signo); 12 void ngx_restart_signal_handler(int signo);
11 void ngx_rotate_signal_handler(int signo); 13 void ngx_rotate_signal_handler(int signo);
12 14
13 15
16 typedef struct {
17 int signo;
18 char *signame;
19 char *action;
20 void (*handler)(int signo);
21 } ngx_signal_t;
22
23
24 ngx_signal_t signals[] = {
25 { ngx_signal_value(NGX_RESTART_SIGNAL),
26 "SIG" ngx_value(NGX_RESTART_SIGNAL),
27 "restarting",
28 ngx_signal_handler },
29
30 { ngx_signal_value(NGX_ROTATE_SIGNAL),
31 "SIG" ngx_value(NGX_ROTATE_SIGNAL),
32 "reopen logs",
33 ngx_signal_handler },
34
35 { ngx_signal_value(NGX_INTERRUPT_SIGNAL),
36 "SIG" ngx_value(NGX_INTERRUPT_SIGNAL),
37 "exiting",
38 ngx_signal_handler },
39
40 { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
41 "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
42 "shutdowning",
43 ngx_signal_handler },
44
45 { SIGCHLD, "SIGCHLD", NULL, ngx_sigchld_handler },
46
47 { SIGPIPE, "SIGPIPE, SIG_IGN", NULL, SIG_IGN },
48
49 { 0, NULL, NULL, NULL }
50 };
51
52
14 int ngx_posix_init(ngx_log_t *log) 53 int ngx_posix_init(ngx_log_t *log)
15 { 54 {
16 struct rlimit rlmt; 55 ngx_signal_t *sig;
17 struct sigaction sa; 56 struct rlimit rlmt;
57 struct sigaction sa;
18 58
19 ngx_memzero(&sa, sizeof(struct sigaction)); 59 for (sig = signals; sig->signo != 0; sig++) {
20 sa.sa_handler = SIG_IGN; 60 ngx_memzero(&sa, sizeof(struct sigaction));
21 sigemptyset(&sa.sa_mask); 61 sa.sa_handler = sig->handler;
22 if (sigaction(SIGPIPE, &sa, NULL) == -1) { 62 sigemptyset(&sa.sa_mask);
23 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, 63 if (sigaction(sig->signo, &sa, NULL) == -1) {
24 "sigaction(SIGPIPE, SIG_IGN) failed"); 64 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
25 return NGX_ERROR; 65 "sigaction(%s) failed", sig->signame);
66 return NGX_ERROR;
67 }
26 } 68 }
27
28 ngx_memzero(&sa, sizeof(struct sigaction));
29 sa.sa_handler = ngx_sigchld_handler;
30 sigemptyset(&sa.sa_mask);
31 if (sigaction(SIGCHLD, &sa, NULL) == -1) {
32 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
33 "sigaction(SIGCHLD) failed");
34 return NGX_ERROR;
35 }
36
37 sa.sa_handler = ngx_restart_signal_handler;
38 if (sigaction(ngx_signal_value(NGX_RESTART_SIGNAL), &sa, NULL) == -1) {
39 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
40 "sigaction(SIG" ngx_value(NGX_RESTART_SIGNAL) ") failed");
41 return NGX_ERROR;
42 }
43
44 sa.sa_handler = ngx_rotate_signal_handler;
45 if (sigaction(ngx_signal_value(NGX_ROTATE_SIGNAL), &sa, NULL) == -1) {
46 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
47 "sigaction(SIG" ngx_value(NGX_ROTATE_SIGNAL) ") failed");
48 return NGX_ERROR;
49 }
50
51 69
52 if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { 70 if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
53 ngx_log_error(NGX_LOG_ALERT, log, errno, 71 ngx_log_error(NGX_LOG_ALERT, log, errno,
54 "getrlimit(RLIMIT_NOFILE) failed)"); 72 "getrlimit(RLIMIT_NOFILE) failed)");
55 return NGX_ERROR; 73 return NGX_ERROR;
66 #else 84 #else
67 ngx_inherited_nonblocking = 0; 85 ngx_inherited_nonblocking = 0;
68 #endif 86 #endif
69 87
70 return NGX_OK; 88 return NGX_OK;
89 }
90
91
92 void ngx_signal_handler(int signo)
93 {
94 char *name;
95 ngx_signal_t *sig;
96
97 for (sig = signals; sig->signo != 0; sig++) {
98 if (sig->signo == signo) {
99 break;
100 }
101 }
102
103 /* STUB */
104 name = strsignal(signo);
105 ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
106 "signal #%d (%s: %s) received, %s",
107 signo, sig->signame, name, sig->action);
108
109 switch (signo) {
110
111 /* STUB */
112 case SIGQUIT:
113 case SIGABRT:
114
115 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
116 case ngx_signal_value(NGX_INTERRUPT_SIGNAL):
117 done = 1;
118 break;
119
120 case ngx_signal_value(NGX_RESTART_SIGNAL):
121 restart = 1;
122 break;
123
124 case ngx_signal_value(NGX_ROTATE_SIGNAL):
125 rotate = 1;
126 break;
127 }
128 }
129
130
131 void ngx_exit_signal_handler(int signo)
132 {
133 char *s;
134
135 s = strsignal(signo);
136 ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
137 "%s signal received, exiting", s);
138 done = 1;
71 } 139 }
72 140
73 141
74 void ngx_restart_signal_handler(int signo) 142 void ngx_restart_signal_handler(int signo)
75 { 143 {