blob: 5c2f78702564bb4b0254b90d75efb3abbe2acdce [file] [log] [blame]
Igor Sysoev0ab91b92004-06-06 19:49:18 +00001
Igor Sysoevd90282d2004-09-28 08:34:51 +00002/*
Igor Sysoevff8da912004-09-29 16:00:49 +00003 * Copyright (C) Igor Sysoev
Maxim Konovalovf8d59e32012-01-18 15:07:43 +00004 * Copyright (C) Nginx, Inc.
Igor Sysoevd90282d2004-09-28 08:34:51 +00005 */
6
7
Igor Sysoev0ab91b92004-06-06 19:49:18 +00008#include <ngx_config.h>
9#include <ngx_core.h>
10
11
Igor Sysoev67cd3362006-11-20 08:51:45 +000012ngx_uint_t ngx_pagesize;
13ngx_uint_t ngx_pagesize_shift;
Igor Sysoev24025022005-12-16 15:07:08 +000014ngx_uint_t ngx_cacheline_size;
Igor Sysoev0ab91b92004-06-06 19:49:18 +000015
16
Igor Sysoevc1571722005-03-19 12:38:37 +000017void *
18ngx_alloc(size_t size, ngx_log_t *log)
Igor Sysoev0ab91b92004-06-06 19:49:18 +000019{
20 void *p;
21
Igor Sysoevc1571722005-03-19 12:38:37 +000022 p = malloc(size);
23 if (p == NULL) {
Igor Sysoev0ab91b92004-06-06 19:49:18 +000024 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
Igor Sysoevb13029c2009-11-15 09:03:08 +000025 "malloc(%uz) failed", size);
Igor Sysoev0ab91b92004-06-06 19:49:18 +000026 }
27
Igor Sysoev1b735832004-11-11 14:07:14 +000028 ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, log, 0, "malloc: %p:%uz", p, size);
Igor Sysoev0ab91b92004-06-06 19:49:18 +000029
30 return p;
31}
32
33
Igor Sysoevc1571722005-03-19 12:38:37 +000034void *
35ngx_calloc(size_t size, ngx_log_t *log)
Igor Sysoev0ab91b92004-06-06 19:49:18 +000036{
37 void *p;
38
39 p = ngx_alloc(size, log);
40
41 if (p) {
42 ngx_memzero(p, size);
43 }
44
45 return p;
46}
47
48
Igor Sysoevf6906042004-11-25 16:17:31 +000049#if (NGX_HAVE_POSIX_MEMALIGN)
Igor Sysoev0ab91b92004-06-06 19:49:18 +000050
Igor Sysoevc1571722005-03-19 12:38:37 +000051void *
52ngx_memalign(size_t alignment, size_t size, ngx_log_t *log)
Igor Sysoev0ab91b92004-06-06 19:49:18 +000053{
54 void *p;
Igor Sysoevfc514f12009-11-15 08:56:40 +000055 int err;
Igor Sysoev0ab91b92004-06-06 19:49:18 +000056
Igor Sysoevfc514f12009-11-15 08:56:40 +000057 err = posix_memalign(&p, alignment, size);
58
59 if (err) {
60 ngx_log_error(NGX_LOG_EMERG, log, err,
Igor Sysoevb13029c2009-11-15 09:03:08 +000061 "posix_memalign(%uz, %uz) failed", alignment, size);
Igor Sysoevfc514f12009-11-15 08:56:40 +000062 p = NULL;
Igor Sysoev0ab91b92004-06-06 19:49:18 +000063 }
64
Igor Sysoev93da5652009-11-16 16:00:52 +000065 ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0,
Igor Sysoev3e1a05c2009-11-16 12:46:05 +000066 "posix_memalign: %p:%uz @%uz", p, size, alignment);
Igor Sysoev0ab91b92004-06-06 19:49:18 +000067
68 return p;
69}
70
Igor Sysoevf6906042004-11-25 16:17:31 +000071#elif (NGX_HAVE_MEMALIGN)
Igor Sysoev0ab91b92004-06-06 19:49:18 +000072
Igor Sysoevc1571722005-03-19 12:38:37 +000073void *
74ngx_memalign(size_t alignment, size_t size, ngx_log_t *log)
Igor Sysoev0ab91b92004-06-06 19:49:18 +000075{
76 void *p;
77
Igor Sysoevc1571722005-03-19 12:38:37 +000078 p = memalign(alignment, size);
79 if (p == NULL) {
Igor Sysoev0ab91b92004-06-06 19:49:18 +000080 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
Igor Sysoevb13029c2009-11-15 09:03:08 +000081 "memalign(%uz, %uz) failed", alignment, size);
Igor Sysoev0ab91b92004-06-06 19:49:18 +000082 }
83
Igor Sysoev93da5652009-11-16 16:00:52 +000084 ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0,
Igor Sysoev3e1a05c2009-11-16 12:46:05 +000085 "memalign: %p:%uz @%uz", p, size, alignment);
Igor Sysoev0ab91b92004-06-06 19:49:18 +000086
87 return p;
88}
89
90#endif