summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn Strauss <gstrauss@gluelogic.com>2019-02-03 23:27:57 -0500
committerGlenn Strauss <gstrauss@gluelogic.com>2019-02-04 02:25:48 -0500
commitfb9b8ad8ae515ac1568b49d46ffc2775d15d1e0e (patch)
tree9002b132dc4f13f6e2f814c6dff3613d9b5ea085
parent413c0e557e4c813e726b72ce08ac3c78ab5d1888 (diff)
downloadlighttpd1.4-fb9b8ad8ae515ac1568b49d46ffc2775d15d1e0e.tar.gz
lighttpd1.4-fb9b8ad8ae515ac1568b49d46ffc2775d15d1e0e.zip
[core] mark startup/shutdown funcs cold
-rw-r--r--src/configfile.h22
-rw-r--r--src/configparser.y2
-rw-r--r--src/connections.c11
-rw-r--r--src/connections.h3
-rw-r--r--src/fdevent.h9
-rw-r--r--src/network.h6
-rw-r--r--src/network_write.h2
-rw-r--r--src/plugin.h19
-rw-r--r--src/server.c19
-rw-r--r--src/stat_cache.h5
10 files changed, 88 insertions, 10 deletions
diff --git a/src/configfile.h b/src/configfile.h
index 1cef1209..61d66d0c 100644
--- a/src/configfile.h
+++ b/src/configfile.h
@@ -81,8 +81,12 @@ struct data_config {
struct cond_cache_t; /* declaration */
+__attribute_cold__
data_config *data_config_init(void);
+
+__attribute_cold__
int data_config_pcre_compile(data_config *dc);
+
int data_config_pcre_exec(data_config *dc, struct cond_cache_t *cache, buffer *b);
typedef struct {
@@ -94,14 +98,26 @@ typedef struct {
buffer *basedir;
} config_t;
+__attribute_cold__
int config_read(server *srv, const char *fn);
+
+__attribute_cold__
int config_set_defaults(server *srv);
+
+__attribute_cold__
void *configparserAlloc(void *(*mallocProc)(size_t));
+
+__attribute_cold__
void configparserFree(void *p, void (*freeProc)(void*));
+
+__attribute_cold__
void configparser(void *yyp, int yymajor, buffer *yyminor, config_t *ctx);
+
+__attribute_cold__
int config_parse_file(server *srv, config_t *context, const char *fn);
+
+__attribute_cold__
int config_parse_cmd(server *srv, config_t *context, const char *cmd);
-data_unset *configparser_merge_data(data_unset *op1, const data_unset *op2);
int config_setup_connection(server *srv, connection *con);
int config_patch_connection(server *srv, connection *con);
@@ -133,8 +149,12 @@ typedef struct {
config_scope_type_t scope;
} config_values_t;
+__attribute_cold__
int config_insert_values_global(server *srv, array *ca, const config_values_t *cv, config_scope_type_t scope);
+
+__attribute_cold__
int config_insert_values_internal(server *srv, array *ca, const config_values_t *cv, config_scope_type_t scope);
+
int config_check_cond(server *srv, connection *con, data_config *dc);
#endif
diff --git a/src/configparser.y b/src/configparser.y
index 9e49ad73..60b6a67c 100644
--- a/src/configparser.y
+++ b/src/configparser.y
@@ -63,7 +63,7 @@ static data_unset *configparser_get_variable(config_t *ctx, const buffer *key) {
/* op1 is to be eat/return by this function if success, op1->key is not cared
op2 is left untouch, unreferenced
*/
-data_unset *configparser_merge_data(data_unset *op1, const data_unset *op2) {
+static data_unset *configparser_merge_data(data_unset *op1, const data_unset *op2) {
/* type mismatch */
if (op1->type != op2->type) {
if (op1->type == TYPE_STRING && op2->type == TYPE_INTEGER) {
diff --git a/src/connections.c b/src/connections.c
index fa6df0ee..e3df3203 100644
--- a/src/connections.c
+++ b/src/connections.c
@@ -36,6 +36,12 @@ typedef struct {
PLUGIN_DATA;
} plugin_data;
+__attribute_cold__
+static connection *connection_init(server *srv);
+
+static int connection_reset(server *srv, connection *con);
+
+
static connection *connections_get_new_connection(server *srv) {
connections *conns = srv->conns;
size_t i;
@@ -473,7 +479,8 @@ static int connection_handle_write(server *srv, connection *con) {
-connection *connection_init(server *srv) {
+__attribute_cold__
+static connection *connection_init(server *srv) {
connection *con;
UNUSED(srv);
@@ -594,7 +601,7 @@ void connections_free(server *srv) {
}
-int connection_reset(server *srv, connection *con) {
+static int connection_reset(server *srv, connection *con) {
plugins_call_connection_reset(srv, con);
connection_response_reset(srv, con);
diff --git a/src/connections.h b/src/connections.h
index f498e556..d1b7ad1e 100644
--- a/src/connections.h
+++ b/src/connections.h
@@ -4,8 +4,7 @@
#include "base.h"
-connection *connection_init(server *srv);
-int connection_reset(server *srv, connection *con);
+__attribute_cold__
void connections_free(server *srv);
connection * connection_accept(server *srv, server_socket *srv_sock);
diff --git a/src/fdevent.h b/src/fdevent.h
index ced9602a..a46deee5 100644
--- a/src/fdevent.h
+++ b/src/fdevent.h
@@ -31,10 +31,19 @@ typedef handler_t (*fdevent_handler)(struct server *srv, void *ctx, int revents)
#define FDEVENT_STREAM_RESPONSE_BUFMIN BV(1)
#define FDEVENT_STREAM_RESPONSE_POLLRDHUP BV(15)
+__attribute_cold__
int fdevent_config(server *srv);
+
+__attribute_cold__
const char * fdevent_show_event_handlers(void);
+
+__attribute_cold__
fdevents *fdevent_init(struct server *srv);
+
+__attribute_cold__
int fdevent_reset(fdevents *ev); /* "init" after fork() */
+
+__attribute_cold__
void fdevent_free(fdevents *ev);
int fdevent_event_get_interest(const fdevents *ev, int fd);
diff --git a/src/network.h b/src/network.h
index f6f9f3fe..7a88943e 100644
--- a/src/network.h
+++ b/src/network.h
@@ -8,10 +8,16 @@ struct server_socket; /* declaration */
void network_accept_tcp_nagle_disable(int fd);
+__attribute_cold__
int network_init(server *srv, int stdin_fd);
+
+__attribute_cold__
int network_close(server *srv);
+__attribute_cold__
int network_register_fdevents(server *srv);
+
+__attribute_cold__
void network_unregister_sock(server *srv, struct server_socket *srv_socket);
#endif
diff --git a/src/network_write.h b/src/network_write.h
index a80cbcf8..375b3c1e 100644
--- a/src/network_write.h
+++ b/src/network_write.h
@@ -4,6 +4,8 @@
#include "base_decls.h"
int network_write_init(server *srv);
+
+__attribute_cold__
const char * network_write_show_handlers(void);
#endif
diff --git a/src/plugin.h b/src/plugin.h
index 97961a9b..2e23488c 100644
--- a/src/plugin.h
+++ b/src/plugin.h
@@ -14,12 +14,13 @@
static handler_t x(server *srv, connection *con, void *p_d)
#define INIT_FUNC(x) \
+ __attribute_cold__ \
static void *x(void)
-#define FREE_FUNC SERVER_FUNC
+#define FREE_FUNC __attribute_cold__ SERVER_FUNC
+#define SETDEFAULTS_FUNC __attribute_cold__ SERVER_FUNC
+#define SIGHUP_FUNC __attribute_cold__ SERVER_FUNC
#define TRIGGER_FUNC SERVER_FUNC
-#define SETDEFAULTS_FUNC SERVER_FUNC
-#define SIGHUP_FUNC SERVER_FUNC
#define SUBREQUEST_FUNC CONNECTION_FUNC
#define PHYSICALPATH_FUNC CONNECTION_FUNC
@@ -68,7 +69,10 @@ typedef struct {
void *lib;
} plugin;
+__attribute_cold__
int plugins_load(server *srv);
+
+__attribute_cold__
void plugins_free(server *srv);
handler_t plugins_call_handle_uri_raw(server *srv, connection *con);
@@ -86,11 +90,18 @@ handler_t plugins_call_handle_connection_close(server *srv, connection *con);
handler_t plugins_call_connection_reset(server *srv, connection *con);
handler_t plugins_call_handle_trigger(server *srv);
-handler_t plugins_call_handle_sighup(server *srv);
handler_t plugins_call_handle_waitpid(server *srv, pid_t pid, int status);
+__attribute_cold__
+handler_t plugins_call_handle_sighup(server *srv);
+
+__attribute_cold__
handler_t plugins_call_init(server *srv);
+
+__attribute_cold__
handler_t plugins_call_set_defaults(server *srv);
+
+__attribute_cold__
handler_t plugins_call_cleanup(server *srv);
#endif
diff --git a/src/server.c b/src/server.c
index 9bbe56e6..11c0332b 100644
--- a/src/server.c
+++ b/src/server.c
@@ -222,6 +222,7 @@ static int daemonize(void) {
}
#endif
+__attribute_cold__
static server *server_init(void) {
int i;
server *srv = calloc(1, sizeof(*srv));
@@ -315,6 +316,7 @@ static server *server_init(void) {
return srv;
}
+__attribute_cold__
static void server_free(server *srv) {
size_t i;
@@ -407,6 +409,7 @@ static void server_free(server *srv) {
free(srv);
}
+__attribute_cold__
static void remove_pid_file(server *srv) {
if (pid_fd <= -2) return;
if (!buffer_string_is_empty(srv->srvconf.pid_file) && 0 <= pid_fd) {
@@ -437,6 +440,7 @@ static void remove_pid_file(server *srv) {
}
+__attribute_cold__
static server_socket * server_oneshot_getsock(server *srv, sock_addr *cnt_addr) {
server_socket *srv_socket, *srv_socket_wild = NULL;
size_t i;
@@ -462,6 +466,7 @@ static server_socket * server_oneshot_getsock(server *srv, sock_addr *cnt_addr)
}
+__attribute_cold__
static int server_oneshot_init(server *srv, int fd) {
/* Note: does not work with netcat due to requirement that fd be socket.
* STDOUT_FILENO was not saved earlier in startup, and that is to where
@@ -526,6 +531,7 @@ static int server_oneshot_init(server *srv, int fd) {
}
+__attribute_cold__
static void show_version (void) {
char *b = PACKAGE_DESC TEXT_SSL \
" - a light and fast webserver\n"
@@ -536,6 +542,7 @@ static void show_version (void) {
write_all(STDOUT_FILENO, b, strlen(b));
}
+__attribute_cold__
static void show_features (void) {
static const char features[] =
"\nFeatures:\n\n"
@@ -634,6 +641,7 @@ static void show_features (void) {
printf("%s%s%s\n", fdevent_show_event_handlers(), network_write_show_handlers(), features);
}
+__attribute_cold__
static void show_help (void) {
char *b = PACKAGE_DESC TEXT_SSL
#ifdef NONREPRODUCIBLE_BUILD
@@ -831,6 +839,7 @@ static int log_error_cycle(server *srv) {
return 0;
}
+__attribute_cold__
static int log_error_close(server *srv) {
switch(srv->errorlog_mode) {
case ERRORLOG_PIPE:
@@ -856,6 +865,7 @@ static int log_error_close(server *srv) {
return 0;
}
+__attribute_cold__
static void server_sockets_save (server *srv) { /* graceful_restart */
memcpy(&graceful_sockets, &srv->srv_sockets, sizeof(server_socket_array));
memset(&srv->srv_sockets, 0, sizeof(server_socket_array));
@@ -863,6 +873,7 @@ static void server_sockets_save (server *srv) { /* graceful_restart */
memset(&srv->srv_sockets_inherited, 0, sizeof(server_socket_array));
}
+__attribute_cold__
static void server_sockets_restore (server *srv) { /* graceful_restart */
memcpy(&srv->srv_sockets, &graceful_sockets, sizeof(server_socket_array));
memset(&graceful_sockets, 0, sizeof(server_socket_array));
@@ -870,6 +881,7 @@ static void server_sockets_restore (server *srv) { /* graceful_restart */
memset(&inherited_sockets, 0, sizeof(server_socket_array));
}
+__attribute_cold__
static int server_sockets_set_nb_cloexec (server *srv) {
if (srv->sockets_disabled) return 0; /* lighttpd -1 (one-shot mode) */
for (size_t i = 0; i < srv->srv_sockets.used; ++i) {
@@ -883,6 +895,7 @@ static int server_sockets_set_nb_cloexec (server *srv) {
return 0;
}
+__attribute_cold__
static void server_sockets_set_event (server *srv, int event) {
for (size_t i = 0; i < srv->srv_sockets.used; ++i) {
server_socket *srv_socket = srv->srv_sockets.ptr[i];
@@ -890,11 +903,13 @@ static void server_sockets_set_event (server *srv, int event) {
}
}
+__attribute_cold__
static void server_sockets_unregister (server *srv) {
for (size_t i = 0; i < srv->srv_sockets.used; ++i)
network_unregister_sock(srv, srv->srv_sockets.ptr[i]);
}
+__attribute_cold__
static void server_sockets_close (server *srv) {
/* closing socket right away will make it possible for the next lighttpd
* to take over (old-style graceful restart), but only if backends
@@ -911,6 +926,7 @@ static void server_sockets_close (server *srv) {
}
}
+__attribute_cold__
static void server_graceful_shutdown_maint (server *srv) {
connections *conns = srv->conns;
for (size_t ndx = 0; ndx < conns->used; ++ndx) {
@@ -947,6 +963,7 @@ static void server_graceful_shutdown_maint (server *srv) {
}
}
+__attribute_cold__
static void server_graceful_state (server *srv) {
if (!srv_shutdown) server_graceful_shutdown_maint(srv);
@@ -975,6 +992,7 @@ static void server_graceful_state (server *srv) {
}
}
+__attribute_cold__
static int server_main (server * const srv, int argc, char **argv) {
int print_config = 0;
int test_config = 0;
@@ -1731,6 +1749,7 @@ static int server_main (server * const srv, int argc, char **argv) {
return 1;
}
+__attribute_cold__
__attribute_noinline__
static int server_handle_sighup (server * const srv) {
handler_t r;
diff --git a/src/stat_cache.h b/src/stat_cache.h
index e5fc2d74..efbe30ea 100644
--- a/src/stat_cache.h
+++ b/src/stat_cache.h
@@ -31,8 +31,13 @@ typedef struct {
buffer *content_type;
} stat_cache_entry;
+__attribute_cold__
int stat_cache_choose_engine (server *srv, const buffer *stat_cache_string);
+
+__attribute_cold__
struct stat_cache *stat_cache_init(server *srv);
+
+__attribute_cold__
void stat_cache_free(struct stat_cache *fc);
const buffer * stat_cache_mimetype_by_ext(const connection *con, const char *name, size_t nlen);