diff src/core/ngx_palloc.c @ 154:bb61aa162c6b NGINX_0_3_24

nginx 0.3.24 *) Workaround: for bug in FreeBSD kqueue. *) Bugfix: now a response generated by the "post_action" directive is not transferred to a client. *) Bugfix: the memory leaks were occurring if many log files were used. *) Bugfix: the first "proxy_redirect" directive was working inside one location. *) Bugfix: on 64-bit platforms segmentation fault may occurred on start if the many names were used in the "server_name" directives; bug appeared in 0.3.18.
author Igor Sysoev <http://sysoev.ru>
date Wed, 01 Feb 2006 00:00:00 +0300
parents 8e6d4d96ec4c
children 87699398f955
line wrap: on
line diff
--- a/src/core/ngx_palloc.c
+++ b/src/core/ngx_palloc.c
@@ -221,6 +221,46 @@ ngx_pcalloc(ngx_pool_t *pool, size_t siz
 }
 
 
+void *
+ngx_shalloc(size_t size)
+{
+    u_char  *p;
+
+    if (size < sizeof(int) || (size & 1)) {
+        p = ngx_cycle->shm_last;
+
+    } else {
+        p = ngx_align_ptr(ngx_cycle->shm_last, NGX_ALIGNMENT);
+    }
+
+    if ((size_t) (ngx_cycle->shm_end - p) >= size) {
+        ngx_cycle->shm_last = p + size;
+        return p;
+    }
+
+    ngx_log_error(NGX_LOG_EMERG, ngx_cycle->log, 0,
+                  "allocation of %uz bytes in shared memory failed, "
+                  "only %uz are available",
+                  size, ngx_cycle->shm_end - ngx_cycle->shm_last);
+
+    return NULL;
+}
+
+
+void *
+ngx_shcalloc(size_t size)
+{
+    void *p;
+
+    p = ngx_shalloc(size);
+    if (p) {
+        ngx_memzero(p, size);
+    }
+
+    return p;
+}
+
+
 ngx_pool_cleanup_t *
 ngx_pool_cleanup_add(ngx_pool_t *p, size_t size)
 {