Hi

This is the later part of the globals cleanup, making the set const improves 
the compiler's optimization, removes the need to set them on startup, and can 
improve security by having the CPU protect them from writing.

- Lauri
>From 1ea8e9900bb5c9f181861ba8bb7c3b020a6f4fe4 Mon Sep 17 00:00:00 2001
From: Lauri Kasanen <[email protected]>
Date: Tue, 19 Jun 2012 13:26:34 +0300
Subject: [PATCH 1/2] memory, header, request, monkey, http, iov: Add 
mk_pointer_init macro, mark global mk_pinters const


Signed-off-by: Lauri Kasanen <[email protected]>
---
 src/include/mk_header.h  |   20 ++++++++--------
 src/include/mk_http.h    |   20 ++++++++--------
 src/include/mk_iov.h     |   13 +++++------
 src/include/mk_memory.h  |    2 +
 src/include/mk_request.h |   36 +++++++++++++++---------------
 src/include/monkey.h     |    2 +-
 src/mk_header.c          |   20 ++++++++--------
 src/mk_http.c            |   20 ++++++++--------
 src/mk_iov.c             |   19 +++++-----------
 src/mk_memory.c          |   53 ----------------------------------------------
 src/mk_request.c         |   38 ++++++++++++++++----------------
 src/monkey.c             |    3 +-
 12 files changed, 94 insertions(+), 152 deletions(-)

diff --git a/src/include/mk_header.h b/src/include/mk_header.h
index 3cf29b6..96e5ddd 100644
--- a/src/include/mk_header.h
+++ b/src/include/mk_header.h
@@ -105,18 +105,18 @@ struct header_status_response {
 
 #define MK_HEADER_LAST_MODIFIED "Last-Modified: "
 
-extern mk_pointer mk_header_short_date;
-extern mk_pointer mk_header_short_location;
-extern mk_pointer mk_header_short_ct;
+extern const mk_pointer mk_header_short_date;
+extern const mk_pointer mk_header_short_location;
+extern const mk_pointer mk_header_short_ct;
 
 /* mk pointers with response server headers */
-extern mk_pointer mk_header_conn_ka;
-extern mk_pointer mk_header_conn_close;
-extern mk_pointer mk_header_content_length;
-extern mk_pointer mk_header_content_encoding;
-extern mk_pointer mk_header_accept_ranges;
-extern mk_pointer mk_header_te_chunked;
-extern mk_pointer mk_header_last_modified;
+extern const mk_pointer mk_header_conn_ka;
+extern const mk_pointer mk_header_conn_close;
+extern const mk_pointer mk_header_content_length;
+extern const mk_pointer mk_header_content_encoding;
+extern const mk_pointer mk_header_accept_ranges;
+extern const mk_pointer mk_header_te_chunked;
+extern const mk_pointer mk_header_last_modified;
 
 int mk_header_send(int fd, struct client_session *cs, struct session_request 
*sr);
 void mk_header_response_reset(struct response_headers *header);
diff --git a/src/include/mk_http.h b/src/include/mk_http.h
index 8e7acef..4f80237 100644
--- a/src/include/mk_http.h
+++ b/src/include/mk_http.h
@@ -48,17 +48,17 @@
 #define HTTP_PROTOCOL_10_STR "HTTP/1.0"
 #define HTTP_PROTOCOL_11_STR "HTTP/1.1"
 
-extern mk_pointer mk_http_method_get_p;
-extern mk_pointer mk_http_method_post_p;
-extern mk_pointer mk_http_method_head_p;
-extern mk_pointer mk_http_method_put_p;
-extern mk_pointer mk_http_method_delete_p;
-extern mk_pointer mk_http_method_null_p;
+extern const mk_pointer mk_http_method_get_p;
+extern const mk_pointer mk_http_method_post_p;
+extern const mk_pointer mk_http_method_head_p;
+extern const mk_pointer mk_http_method_put_p;
+extern const mk_pointer mk_http_method_delete_p;
+extern const mk_pointer mk_http_method_null_p;
 
-extern mk_pointer mk_http_protocol_09_p;
-extern mk_pointer mk_http_protocol_10_p;
-extern mk_pointer mk_http_protocol_11_p;
-extern mk_pointer mk_http_protocol_null_p;
+extern const mk_pointer mk_http_protocol_09_p;
+extern const mk_pointer mk_http_protocol_10_p;
+extern const mk_pointer mk_http_protocol_11_p;
+extern const mk_pointer mk_http_protocol_null_p;
 
 #include "mk_request.h"
 #include "mk_memory.h"
diff --git a/src/include/mk_iov.h b/src/include/mk_iov.h
index 63d9ced..9453ab4 100644
--- a/src/include/mk_iov.h
+++ b/src/include/mk_iov.h
@@ -40,13 +40,12 @@
 
 #include "mk_memory.h"
 
-extern mk_pointer mk_iov_crlf;
-extern mk_pointer mk_iov_crlfcrlf;
-extern mk_pointer mk_iov_lf;
-extern mk_pointer mk_iov_space;
-extern mk_pointer mk_iov_slash;
-extern mk_pointer mk_iov_none;
-extern mk_pointer mk_iov_equal;
+extern const mk_pointer mk_iov_crlf;
+extern const mk_pointer mk_iov_lf;
+extern const mk_pointer mk_iov_space;
+extern const mk_pointer mk_iov_slash;
+extern const mk_pointer mk_iov_none;
+extern const mk_pointer mk_iov_equal;
 
 struct mk_iov
 {
diff --git a/src/include/mk_memory.h b/src/include/mk_memory.h
index ea58e86..1bee3cd 100644
--- a/src/include/mk_memory.h
+++ b/src/include/mk_memory.h
@@ -48,4 +48,6 @@ void mk_pointer_print(mk_pointer p);
 char *mk_pointer_to_buf(mk_pointer p);
 void mk_pointer_set(mk_pointer * p, char *data);
 
+#define mk_pointer_init(a) {a, sizeof(a) - 1}
+
 #endif
diff --git a/src/include/mk_request.h b/src/include/mk_request.h
index 83cb402..873ba39 100644
--- a/src/include/mk_request.h
+++ b/src/include/mk_request.h
@@ -36,8 +36,8 @@
 #define MK_CRLF "\r\n"
 #define MK_ENDBLOCK "\r\n\r\n"
 
-extern mk_pointer mk_crlf;
-extern mk_pointer mk_endblock;
+extern const mk_pointer mk_crlf;
+extern const mk_pointer mk_endblock;
 
 /* Headers */
 #define RH_ACCEPT "Accept:"
@@ -57,22 +57,22 @@ extern mk_pointer mk_endblock;
 #define RH_RANGE "Range:"
 #define RH_USER_AGENT "User-Agent:"
 
-extern mk_pointer mk_rh_accept;
-extern mk_pointer mk_rh_accept_charset;
-extern mk_pointer mk_rh_accept_encoding;
-extern mk_pointer mk_rh_accept_language;
-extern mk_pointer mk_rh_connection;
-extern mk_pointer mk_rh_cookie;
-extern mk_pointer mk_rh_content_length;
-extern mk_pointer mk_rh_content_range;
-extern mk_pointer mk_rh_content_type;
-extern mk_pointer mk_rh_if_modified_since;
-extern mk_pointer mk_rh_host;
-extern mk_pointer mk_rh_last_modified;
-extern mk_pointer mk_rh_last_modified_since;
-extern mk_pointer mk_rh_referer;
-extern mk_pointer mk_rh_range;
-extern mk_pointer mk_rh_user_agent;
+extern const mk_pointer mk_rh_accept;
+extern const mk_pointer mk_rh_accept_charset;
+extern const mk_pointer mk_rh_accept_encoding;
+extern const mk_pointer mk_rh_accept_language;
+extern const mk_pointer mk_rh_connection;
+extern const mk_pointer mk_rh_cookie;
+extern const mk_pointer mk_rh_content_length;
+extern const mk_pointer mk_rh_content_range;
+extern const mk_pointer mk_rh_content_type;
+extern const mk_pointer mk_rh_if_modified_since;
+extern const mk_pointer mk_rh_host;
+extern const mk_pointer mk_rh_last_modified;
+extern const mk_pointer mk_rh_last_modified_since;
+extern const mk_pointer mk_rh_referer;
+extern const mk_pointer mk_rh_range;
+extern const mk_pointer mk_rh_user_agent;
 
 /* String limits */
 #define MAX_REQUEST_METHOD 10
diff --git a/src/include/monkey.h b/src/include/monkey.h
index 8e0ae8b..79527fe 100644
--- a/src/include/monkey.h
+++ b/src/include/monkey.h
@@ -32,7 +32,7 @@
 #define SH_CGI 1
 
 /* Monkey Protocol */
-extern mk_pointer mk_monkey_protocol;
+extern const mk_pointer mk_monkey_protocol;
 
 /* Process UID/GID */
 extern gid_t EGID;
diff --git a/src/mk_header.c b/src/mk_header.c
index 275e4d2..7ab21af 100644
--- a/src/mk_header.c
+++ b/src/mk_header.c
@@ -39,17 +39,17 @@
 #include "mk_macros.h"
 
 
-mk_pointer mk_header_short_date;
-mk_pointer mk_header_short_location;
-mk_pointer mk_header_short_ct;
-
-mk_pointer mk_header_conn_ka;
-mk_pointer mk_header_conn_close;
-mk_pointer mk_header_content_length;
-mk_pointer mk_header_content_encoding;
-mk_pointer mk_header_accept_ranges;
-mk_pointer mk_header_te_chunked;
-mk_pointer mk_header_last_modified;
+const mk_pointer mk_header_short_date = mk_pointer_init(MK_HEADER_SHORT_DATE);
+const mk_pointer mk_header_short_location = 
mk_pointer_init(MK_HEADER_SHORT_LOCATION);
+const mk_pointer mk_header_short_ct = mk_pointer_init(MK_HEADER_SHORT_CT);
+
+const mk_pointer mk_header_conn_ka = mk_pointer_init(MK_HEADER_CONN_KA);
+const mk_pointer mk_header_conn_close = mk_pointer_init(MK_HEADER_CONN_CLOSE);
+const mk_pointer mk_header_content_length = 
mk_pointer_init(MK_HEADER_CONTENT_LENGTH);
+const mk_pointer mk_header_content_encoding = 
mk_pointer_init(MK_HEADER_CONTENT_ENCODING);
+const mk_pointer mk_header_accept_ranges = 
mk_pointer_init(MK_HEADER_ACCEPT_RANGES);
+const mk_pointer mk_header_te_chunked = mk_pointer_init(MK_HEADER_TE_CHUNKED);
+const mk_pointer mk_header_last_modified = 
mk_pointer_init(MK_HEADER_LAST_MODIFIED);
 
 #define status_entry(num, str) {num, sizeof(str) - 1, str}
 
diff --git a/src/mk_http.c b/src/mk_http.c
index e3e1c35..3c5ddd3 100644
--- a/src/mk_http.c
+++ b/src/mk_http.c
@@ -46,17 +46,17 @@
 #include "mk_plugin.h"
 #include "mk_macros.h"
 
-mk_pointer mk_http_method_get_p;
-mk_pointer mk_http_method_post_p;
-mk_pointer mk_http_method_head_p;
-mk_pointer mk_http_method_put_p;
-mk_pointer mk_http_method_delete_p;
-mk_pointer mk_http_method_null_p;
-
-mk_pointer mk_http_protocol_09_p;
-mk_pointer mk_http_protocol_10_p;
-mk_pointer mk_http_protocol_11_p;
-mk_pointer mk_http_protocol_null_p;
+const mk_pointer mk_http_method_get_p = mk_pointer_init(HTTP_METHOD_GET_STR);
+const mk_pointer mk_http_method_post_p = mk_pointer_init(HTTP_METHOD_POST_STR);
+const mk_pointer mk_http_method_head_p = mk_pointer_init(HTTP_METHOD_HEAD_STR);
+const mk_pointer mk_http_method_put_p = mk_pointer_init(HTTP_METHOD_PUT_STR);
+const mk_pointer mk_http_method_delete_p = 
mk_pointer_init(HTTP_METHOD_DELETE_STR);
+const mk_pointer mk_http_method_null_p = { NULL, 0 };
+
+const mk_pointer mk_http_protocol_09_p = mk_pointer_init(HTTP_PROTOCOL_09_STR);
+const mk_pointer mk_http_protocol_10_p = mk_pointer_init(HTTP_PROTOCOL_10_STR);
+const mk_pointer mk_http_protocol_11_p = mk_pointer_init(HTTP_PROTOCOL_11_STR);
+const mk_pointer mk_http_protocol_null_p = { NULL, 0 };
 
 
 int mk_http_method_check(mk_pointer method)
diff --git a/src/mk_iov.c b/src/mk_iov.c
index 14960b8..bdaf10c 100644
--- a/src/mk_iov.c
+++ b/src/mk_iov.c
@@ -35,13 +35,12 @@
 #include "mk_utils.h"
 #include "mk_iov.h"
 
-mk_pointer mk_iov_crlf;
-mk_pointer mk_iov_crlfcrlf;
-mk_pointer mk_iov_lf;
-mk_pointer mk_iov_space;
-mk_pointer mk_iov_slash;
-mk_pointer mk_iov_none;
-mk_pointer mk_iov_equal;
+const mk_pointer mk_iov_crlf = mk_pointer_init(MK_IOV_CRLF);
+const mk_pointer mk_iov_lf = mk_pointer_init(MK_IOV_LF);
+const mk_pointer mk_iov_space = mk_pointer_init(MK_IOV_SPACE);
+const mk_pointer mk_iov_slash = mk_pointer_init(MK_IOV_SLASH);
+const mk_pointer mk_iov_none = mk_pointer_init(MK_IOV_NONE);
+const mk_pointer mk_iov_equal = mk_pointer_init(MK_IOV_EQUAL);
 
 static void _mk_iov_set_free(struct mk_iov *mk_io, char *buf)
 {
@@ -208,10 +207,4 @@ void mk_iov_print(struct mk_iov *mk_io)
 
 void mk_iov_separators_init()
 {
-    mk_pointer_set(&mk_iov_crlf, MK_IOV_CRLF);
-    mk_pointer_set(&mk_iov_lf, MK_IOV_LF);
-    mk_pointer_set(&mk_iov_space, MK_IOV_SPACE);
-    mk_pointer_set(&mk_iov_slash, MK_IOV_SLASH);
-    mk_pointer_set(&mk_iov_none, MK_IOV_NONE);
-    mk_pointer_set(&mk_iov_equal, MK_IOV_EQUAL);
 }
diff --git a/src/mk_memory.c b/src/mk_memory.c
index 4ca9efe..6b28513 100644
--- a/src/mk_memory.c
+++ b/src/mk_memory.c
@@ -137,59 +137,6 @@ void mk_pointer_set(mk_pointer *p, char *data)
 
 void mk_mem_pointers_init()
 {
-    /* Short server response headers */
-    mk_pointer_set(&mk_header_short_date, MK_HEADER_SHORT_DATE);
-    mk_pointer_set(&mk_header_short_location, MK_HEADER_SHORT_LOCATION);
-    mk_pointer_set(&mk_header_short_ct, MK_HEADER_SHORT_CT);
-
-    /* Request vars */
-    mk_pointer_set(&mk_crlf, MK_CRLF);
-    mk_pointer_set(&mk_endblock, MK_ENDBLOCK);
-
-    /* Client headers */
-    mk_pointer_set(&mk_rh_accept, RH_ACCEPT);
-    mk_pointer_set(&mk_rh_accept_charset, RH_ACCEPT_CHARSET);
-    mk_pointer_set(&mk_rh_accept_encoding, RH_ACCEPT_ENCODING);
-    mk_pointer_set(&mk_rh_accept_language, RH_ACCEPT_LANGUAGE);
-    mk_pointer_set(&mk_rh_connection, RH_CONNECTION);
-    mk_pointer_set(&mk_rh_cookie, RH_COOKIE);
-    mk_pointer_set(&mk_rh_content_length, RH_CONTENT_LENGTH);
-    mk_pointer_set(&mk_rh_content_range, RH_CONTENT_RANGE);
-    mk_pointer_set(&mk_rh_content_type, RH_CONTENT_TYPE);
-    mk_pointer_set(&mk_rh_if_modified_since, RH_IF_MODIFIED_SINCE);
-    mk_pointer_set(&mk_rh_host, RH_HOST);
-    mk_pointer_set(&mk_rh_last_modified, RH_LAST_MODIFIED);
-    mk_pointer_set(&mk_rh_last_modified_since, RH_LAST_MODIFIED_SINCE);
-    mk_pointer_set(&mk_rh_referer, RH_REFERER);
-    mk_pointer_set(&mk_rh_range, RH_RANGE);
-    mk_pointer_set(&mk_rh_user_agent, RH_USER_AGENT);
-
-    /* Server response normal headers */
-    mk_pointer_set(&mk_header_conn_ka, MK_HEADER_CONN_KA);
-    mk_pointer_set(&mk_header_conn_close, MK_HEADER_CONN_CLOSE);
-    mk_pointer_set(&mk_header_content_length, MK_HEADER_CONTENT_LENGTH);
-    mk_pointer_set(&mk_header_content_encoding, MK_HEADER_CONTENT_ENCODING);
-    mk_pointer_set(&mk_header_accept_ranges, MK_HEADER_ACCEPT_RANGES);
-    mk_pointer_set(&mk_header_te_chunked, MK_HEADER_TE_CHUNKED);
-    mk_pointer_set(&mk_header_last_modified, MK_HEADER_LAST_MODIFIED);
-
     mk_iov_separators_init();
-
-    /* Server */
-    mk_pointer_set(&mk_monkey_protocol, HTTP_PROTOCOL_11_STR);
-
-    /* HTTP */
-    mk_pointer_set(&mk_http_method_get_p, HTTP_METHOD_GET_STR);
-    mk_pointer_set(&mk_http_method_post_p, HTTP_METHOD_POST_STR);
-    mk_pointer_set(&mk_http_method_head_p, HTTP_METHOD_HEAD_STR);
-    mk_pointer_set(&mk_http_method_put_p, HTTP_METHOD_PUT_STR);
-    mk_pointer_set(&mk_http_method_delete_p, HTTP_METHOD_DELETE_STR);
-    mk_pointer_reset(&mk_http_method_null_p);
-
-    mk_pointer_set(&mk_http_protocol_09_p, HTTP_PROTOCOL_09_STR);
-    mk_pointer_set(&mk_http_protocol_10_p, HTTP_PROTOCOL_10_STR);
-    mk_pointer_set(&mk_http_protocol_11_p, HTTP_PROTOCOL_11_STR);
-    mk_pointer_reset(&mk_http_protocol_null_p);
-
 }
 
diff --git a/src/mk_request.c b/src/mk_request.c
index 8a64255..1c38367 100644
--- a/src/mk_request.c
+++ b/src/mk_request.c
@@ -59,25 +59,25 @@
 #include "mk_plugin.h"
 #include "mk_macros.h"
 
-mk_pointer mk_crlf;
-mk_pointer mk_endblock;
-
-mk_pointer mk_rh_accept;
-mk_pointer mk_rh_accept_charset;
-mk_pointer mk_rh_accept_encoding;
-mk_pointer mk_rh_accept_language;
-mk_pointer mk_rh_connection;
-mk_pointer mk_rh_cookie;
-mk_pointer mk_rh_content_length;
-mk_pointer mk_rh_content_range;
-mk_pointer mk_rh_content_type;
-mk_pointer mk_rh_if_modified_since;
-mk_pointer mk_rh_host;
-mk_pointer mk_rh_last_modified;
-mk_pointer mk_rh_last_modified_since;
-mk_pointer mk_rh_referer;
-mk_pointer mk_rh_range;
-mk_pointer mk_rh_user_agent;
+const mk_pointer mk_crlf = mk_pointer_init(MK_CRLF);
+const mk_pointer mk_endblock = mk_pointer_init(MK_ENDBLOCK);
+
+const mk_pointer mk_rh_accept = mk_pointer_init(RH_ACCEPT);
+const mk_pointer mk_rh_accept_charset = mk_pointer_init(RH_ACCEPT_CHARSET);
+const mk_pointer mk_rh_accept_encoding = mk_pointer_init(RH_ACCEPT_ENCODING);
+const mk_pointer mk_rh_accept_language = mk_pointer_init(RH_ACCEPT_LANGUAGE);
+const mk_pointer mk_rh_connection = mk_pointer_init(RH_CONNECTION);
+const mk_pointer mk_rh_cookie = mk_pointer_init(RH_COOKIE);
+const mk_pointer mk_rh_content_length = mk_pointer_init(RH_CONTENT_LENGTH);
+const mk_pointer mk_rh_content_range = mk_pointer_init(RH_CONTENT_RANGE);
+const mk_pointer mk_rh_content_type = mk_pointer_init(RH_CONTENT_TYPE);
+const mk_pointer mk_rh_if_modified_since = 
mk_pointer_init(RH_IF_MODIFIED_SINCE);
+const mk_pointer mk_rh_host = mk_pointer_init(RH_HOST);
+const mk_pointer mk_rh_last_modified = mk_pointer_init(RH_LAST_MODIFIED);
+const mk_pointer mk_rh_last_modified_since = 
mk_pointer_init(RH_LAST_MODIFIED_SINCE);
+const mk_pointer mk_rh_referer = mk_pointer_init(RH_REFERER);
+const mk_pointer mk_rh_range = mk_pointer_init(RH_RANGE);
+const mk_pointer mk_rh_user_agent = mk_pointer_init(RH_USER_AGENT);
 
 pthread_key_t request_list;
 
diff --git a/src/monkey.c b/src/monkey.c
index 6d5e8d7..a940733 100644
--- a/src/monkey.c
+++ b/src/monkey.c
@@ -35,6 +35,7 @@
 #include "mk_plugin.h"
 #include "mk_macros.h"
 #include "mk_env.h"
+#include "mk_http.h"
 
 #if defined(__DATE__) && defined(__TIME__)
 static const char MONKEY_BUILT[] = __DATE__ " " __TIME__;
@@ -42,7 +43,7 @@ static const char MONKEY_BUILT[] = __DATE__ " " __TIME__;
 static const char MONKEY_BUILT[] = "Unknown";
 #endif
 
-mk_pointer mk_monkey_protocol;
+const mk_pointer mk_monkey_protocol = mk_pointer_init(HTTP_PROTOCOL_11_STR);
 gid_t EGID;
 gid_t EUID;
 
-- 
1.7.2.1

_______________________________________________
Monkey mailing list
[email protected]
http://lists.monkey-project.com/listinfo/monkey

Reply via email to