summaryrefslogtreecommitdiff
path: root/core/sharedarea.c
diff options
context:
space:
mode:
authorUnbit <info@unbit.it>2013-12-10 10:09:38 +0100
committerUnbit <info@unbit.it>2013-12-10 10:09:38 +0100
commita6e6bff08253e3e56a5aaab7929dfc1bdb63317d (patch)
tree117fc1bf1ad821dc3a040a8eccf1dd4e98ff9262 /core/sharedarea.c
parent304f847dc62fb5bb5a735d7806cdfe103e6d2a2f (diff)
downloaduwsgi-a6e6bff08253e3e56a5aaab7929dfc1bdb63317d.tar.gz
sharedarea can be mapped to generic objects
Diffstat (limited to 'core/sharedarea.c')
-rw-r--r--core/sharedarea.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/core/sharedarea.c b/core/sharedarea.c
index cba0d6f6..59835633 100644
--- a/core/sharedarea.c
+++ b/core/sharedarea.c
@@ -308,9 +308,47 @@ struct uwsgi_sharedarea *uwsgi_sharedarea_init_keyval(char *arg) {
"ptr", &s_ptr,
"size", &s_size,
NULL)) {
+ uwsgi_log("invalid sharedarea keyval syntax\n");
+ exit(1);
}
- return NULL;
+ uint64_t len = 0;
+ int pages = 0;
+ if (s_size) {
+ len = uwsgi_n64(s_size);
+ pages = len / uwsgi.page_size;
+ if (len % uwsgi.page_size != 0) pages++;
+ }
+
+ if (s_pages) {
+ pages = atoi(s_pages);
+ }
+
+ char *area = NULL;
+ struct uwsgi_sharedarea *sa = NULL;
+ if (s_file) {
+ }
+ else if (s_fd) {
+ }
+ else if (s_ptr) {
+ }
+
+ if (pages) {
+ if (!area) {
+ sa = uwsgi_sharedarea_init(pages);
+ }
+ else {
+ uwsgi_sharedarea_init_ptr(area, len);
+ }
+ }
+
+ if (s_pages) free(s_pages);
+ if (s_file) free(s_file);
+ if (s_fd) free(s_fd);
+ if (s_ptr) free(s_ptr);
+ if (s_size) free(s_size);
+
+ return sa;
}