]> git.pld-linux.org Git - packages/lighttpd.git/blame - lighttpd-modinit-before-fork.patch
- saved from http://home.hoffie.info/lighttpd-1.4.x-modinit-before-fork.patch
[packages/lighttpd.git] / lighttpd-modinit-before-fork.patch
CommitLineData
25bbbdde
ER
1Index: src/server.c
2===================================================================
3--- src/server.c (revision 2188)
4+++ src/server.c (working copy)
5@@ -865,34 +865,9 @@
6 return -1;
7 }
8
9-#ifdef HAVE_FORK
10- /* network is up, let's deamonize ourself */
11- if (srv->srvconf.dont_daemonize == 0) daemonize();
12-#endif
13-
14 srv->gid = getgid();
15 srv->uid = getuid();
16
17- /* write pid file */
18- if (pid_fd != -1) {
19- buffer_copy_long(srv->tmp_buf, getpid());
20- buffer_append_string(srv->tmp_buf, "\n");
21- write(pid_fd, srv->tmp_buf->ptr, srv->tmp_buf->used - 1);
22- close(pid_fd);
23- pid_fd = -1;
24- }
25-
26- /* Close stderr ASAP in the child process to make sure that nothing
27- * is being written to that fd which may not be valid anymore. */
28- if (-1 == log_error_open(srv)) {
29- log_error_write(srv, __FILE__, __LINE__, "s", "Opening errorlog failed. Going down.");
30-
31- plugins_free(srv);
32- network_close(srv);
33- server_free(srv);
34- return -1;
35- }
36-
37 if (HANDLER_GO_ON != plugins_call_set_defaults(srv)) {
38 log_error_write(srv, __FILE__, __LINE__, "s", "Configuration of plugins failed. Going down.");
39
40@@ -943,9 +918,88 @@
41 return -1;
42 }
43
44+ if (NULL == (srv->ev = fdevent_init(srv->max_fds + 1, srv->event_handler))) {
45+ log_error_write(srv, __FILE__, __LINE__,
46+ "s", "fdevent_init failed");
47+ return -1;
48+ }
49+ /*
50+ * kqueue() is called here, select resets its internals,
51+ * all server sockets get their handlers
52+ *
53+ * */
54+ if (0 != network_register_fdevents(srv)) {
55+ plugins_free(srv);
56+ network_close(srv);
57+ server_free(srv);
58
59+ return -1;
60+ }
61
62+ /* might fail if user is using fam (not gamin) and famd isn't running */
63+ if (NULL == (srv->stat_cache = stat_cache_init())) {
64+ log_error_write(srv, __FILE__, __LINE__, "s",
65+ "stat-cache could not be setup, dieing.");
66+ return -1;
67+ }
68
69+#ifdef HAVE_FAM_H
70+ /* setup FAM */
71+ if (srv->srvconf.stat_cache_engine == STAT_CACHE_ENGINE_FAM) {
72+ if (0 != FAMOpen2(srv->stat_cache->fam, "lighttpd")) {
73+ log_error_write(srv, __FILE__, __LINE__, "s",
74+ "could not open a fam connection, dieing.");
75+ return -1;
76+ }
77+#ifdef HAVE_FAMNOEXISTS
78+ FAMNoExists(srv->stat_cache->fam);
79+#endif
80+
81+ srv->stat_cache->fam_fcce_ndx = -1;
82+ fdevent_register(srv->ev, FAMCONNECTION_GETFD(srv->stat_cache->fam), stat_cache_handle_fdevent, NULL);
83+ fdevent_event_add(srv->ev, &(srv->stat_cache->fam_fcce_ndx), FAMCONNECTION_GETFD(srv->stat_cache->fam), FDEVENT_IN);
84+ }
85+#endif
86+
87+
88+ /* get the current number of FDs */
89+ srv->cur_fds = open("/dev/null", O_RDONLY);
90+ close(srv->cur_fds);
91+
92+ for (i = 0; i < srv->srv_sockets.used; i++) {
93+ server_socket *srv_socket = srv->srv_sockets.ptr[i];
94+ if (-1 == fdevent_fcntl_set(srv->ev, srv_socket->fd)) {
95+ log_error_write(srv, __FILE__, __LINE__, "ss", "fcntl failed:", strerror(errno));
96+ return -1;
97+ }
98+ }
99+
100+ /* Close stderr ASAP to make sure that nothing is being written to
101+ * that fd which may not be valid anymore after forking. */
102+ if (-1 == log_error_open(srv)) {
103+ log_error_write(srv, __FILE__, __LINE__, "s", "Opening errorlog failed. Going down.");
104+
105+ plugins_free(srv);
106+ network_close(srv);
107+ server_free(srv);
108+ return -1;
109+ }
110+
111+#ifdef HAVE_FORK
112+ /* network is up, let's deamonize ourself */
113+ if (srv->srvconf.dont_daemonize == 0) daemonize();
114+#endif
115+
116+ /* write pid file */
117+ if (pid_fd != -1) {
118+ buffer_copy_long(srv->tmp_buf, getpid());
119+ buffer_append_string(srv->tmp_buf, "\n");
120+ write(pid_fd, srv->tmp_buf->ptr, srv->tmp_buf->used - 1);
121+ close(pid_fd);
122+ pid_fd = -1;
123+ }
124+
125+
126 #ifdef HAVE_SIGACTION
127 memset(&act, 0, sizeof(act));
128 act.sa_handler = SIG_IGN;
129@@ -1067,62 +1121,6 @@
130 }
131 #endif
132
133- if (NULL == (srv->ev = fdevent_init(srv->max_fds + 1, srv->event_handler))) {
134- log_error_write(srv, __FILE__, __LINE__,
135- "s", "fdevent_init failed");
136- return -1;
137- }
138- /*
139- * kqueue() is called here, select resets its internals,
140- * all server sockets get their handlers
141- *
142- * */
143- if (0 != network_register_fdevents(srv)) {
144- plugins_free(srv);
145- network_close(srv);
146- server_free(srv);
147-
148- return -1;
149- }
150-
151- /* might fail if user is using fam (not gamin) and famd isn't running */
152- if (NULL == (srv->stat_cache = stat_cache_init())) {
153- log_error_write(srv, __FILE__, __LINE__, "s",
154- "stat-cache could not be setup, dieing.");
155- return -1;
156- }
157-
158-#ifdef HAVE_FAM_H
159- /* setup FAM */
160- if (srv->srvconf.stat_cache_engine == STAT_CACHE_ENGINE_FAM) {
161- if (0 != FAMOpen2(srv->stat_cache->fam, "lighttpd")) {
162- log_error_write(srv, __FILE__, __LINE__, "s",
163- "could not open a fam connection, dieing.");
164- return -1;
165- }
166-#ifdef HAVE_FAMNOEXISTS
167- FAMNoExists(srv->stat_cache->fam);
168-#endif
169-
170- srv->stat_cache->fam_fcce_ndx = -1;
171- fdevent_register(srv->ev, FAMCONNECTION_GETFD(srv->stat_cache->fam), stat_cache_handle_fdevent, NULL);
172- fdevent_event_add(srv->ev, &(srv->stat_cache->fam_fcce_ndx), FAMCONNECTION_GETFD(srv->stat_cache->fam), FDEVENT_IN);
173- }
174-#endif
175-
176-
177- /* get the current number of FDs */
178- srv->cur_fds = open("/dev/null", O_RDONLY);
179- close(srv->cur_fds);
180-
181- for (i = 0; i < srv->srv_sockets.used; i++) {
182- server_socket *srv_socket = srv->srv_sockets.ptr[i];
183- if (-1 == fdevent_fcntl_set(srv->ev, srv_socket->fd)) {
184- log_error_write(srv, __FILE__, __LINE__, "ss", "fcntl failed:", strerror(errno));
185- return -1;
186- }
187- }
188-
189 /* main-loop */
190 while (!srv_shutdown) {
191 int n;
This page took 0.052033 seconds and 4 git commands to generate.