diff options
| author | Unbit <info@unbit.it> | 2013-12-10 10:09:38 +0100 |
|---|---|---|
| committer | Unbit <info@unbit.it> | 2013-12-10 10:09:38 +0100 |
| commit | a6e6bff08253e3e56a5aaab7929dfc1bdb63317d (patch) | |
| tree | 117fc1bf1ad821dc3a040a8eccf1dd4e98ff9262 /core/sharedarea.c | |
| parent | 304f847dc62fb5bb5a735d7806cdfe103e6d2a2f (diff) | |
| download | uwsgi-a6e6bff08253e3e56a5aaab7929dfc1bdb63317d.tar.gz | |
sharedarea can be mapped to generic objects
Diffstat (limited to 'core/sharedarea.c')
| -rw-r--r-- | core/sharedarea.c | 40 |
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; } |
