|  |  | 
|  | /* | 
|  | * Copyright (C) Igor Sysoev | 
|  | * Copyright (C) Nginx, Inc. | 
|  | */ | 
|  |  | 
|  |  | 
|  | #include <ngx_config.h> | 
|  | #include <ngx_core.h> | 
|  |  | 
|  |  | 
|  | ngx_uint_t  ngx_pagesize; | 
|  | ngx_uint_t  ngx_pagesize_shift; | 
|  | ngx_uint_t  ngx_cacheline_size; | 
|  |  | 
|  |  | 
|  | void * | 
|  | ngx_alloc(size_t size, ngx_log_t *log) | 
|  | { | 
|  | void  *p; | 
|  |  | 
|  | p = malloc(size); | 
|  | if (p == NULL) { | 
|  | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, | 
|  | "malloc(%uz) failed", size); | 
|  | } | 
|  |  | 
|  | ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, log, 0, "malloc: %p:%uz", p, size); | 
|  |  | 
|  | return p; | 
|  | } | 
|  |  | 
|  |  | 
|  | void * | 
|  | ngx_calloc(size_t size, ngx_log_t *log) | 
|  | { | 
|  | void  *p; | 
|  |  | 
|  | p = ngx_alloc(size, log); | 
|  |  | 
|  | if (p) { | 
|  | ngx_memzero(p, size); | 
|  | } | 
|  |  | 
|  | return p; | 
|  | } | 
|  |  | 
|  |  | 
|  | #if (NGX_HAVE_POSIX_MEMALIGN) | 
|  |  | 
|  | void * | 
|  | ngx_memalign(size_t alignment, size_t size, ngx_log_t *log) | 
|  | { | 
|  | void  *p; | 
|  | int    err; | 
|  |  | 
|  | err = posix_memalign(&p, alignment, size); | 
|  |  | 
|  | if (err) { | 
|  | ngx_log_error(NGX_LOG_EMERG, log, err, | 
|  | "posix_memalign(%uz, %uz) failed", alignment, size); | 
|  | p = NULL; | 
|  | } | 
|  |  | 
|  | ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0, | 
|  | "posix_memalign: %p:%uz @%uz", p, size, alignment); | 
|  |  | 
|  | return p; | 
|  | } | 
|  |  | 
|  | #elif (NGX_HAVE_MEMALIGN) | 
|  |  | 
|  | void * | 
|  | ngx_memalign(size_t alignment, size_t size, ngx_log_t *log) | 
|  | { | 
|  | void  *p; | 
|  |  | 
|  | p = memalign(alignment, size); | 
|  | if (p == NULL) { | 
|  | ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, | 
|  | "memalign(%uz, %uz) failed", alignment, size); | 
|  | } | 
|  |  | 
|  | ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0, | 
|  | "memalign: %p:%uz @%uz", p, size, alignment); | 
|  |  | 
|  | return p; | 
|  | } | 
|  |  | 
|  | #endif |