]> git.pld-linux.org Git - packages/lighttpd.git/blob - 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
1 Index: 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.052292 seconds and 4 git commands to generate.