diff src/core/ngx_palloc.c @ 605:5dac8c7fb71b release-0.3.24

nginx-0.3.24-RELEASE import *) 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; the bug had appeared in 0.3.18.
author Igor Sysoev <igor@sysoev.ru>
date Wed, 01 Feb 2006 18:22:15 +0000
parents d4e858a5751a
children 65bf042c0b4f
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)
 {