comparison src/core/ngx_palloc.c @ 6453:12248fe20689

Core: introduced the ngx_palloc_small() function. It deduplicates some code for allocations from memory pool. No functional changes.
author Valentin Bartenev <vbart@nginx.com>
date Wed, 23 Mar 2016 17:44:04 +0300
parents 6be7e59fdd2c
children f61472978419
comparison
equal deleted inserted replaced
6452:6be7e59fdd2c 6453:12248fe20689
7 7
8 #include <ngx_config.h> 8 #include <ngx_config.h>
9 #include <ngx_core.h> 9 #include <ngx_core.h>
10 10
11 11
12 static ngx_inline void *ngx_palloc_small(ngx_pool_t *pool, size_t size,
13 ngx_uint_t align);
12 static void *ngx_palloc_block(ngx_pool_t *pool, size_t size); 14 static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
13 static void *ngx_palloc_large(ngx_pool_t *pool, size_t size); 15 static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
14 16
15 17
16 ngx_pool_t * 18 ngx_pool_t *
118 120
119 121
120 void * 122 void *
121 ngx_palloc(ngx_pool_t *pool, size_t size) 123 ngx_palloc(ngx_pool_t *pool, size_t size)
122 { 124 {
125 if (size <= pool->max) {
126 return ngx_palloc_small(pool, size, 1);
127 }
128
129 return ngx_palloc_large(pool, size);
130 }
131
132
133 void *
134 ngx_pnalloc(ngx_pool_t *pool, size_t size)
135 {
136 if (size <= pool->max) {
137 return ngx_palloc_small(pool, size, 0);
138 }
139
140 return ngx_palloc_large(pool, size);
141 }
142
143
144 static ngx_inline void *
145 ngx_palloc_small(ngx_pool_t *pool, size_t size, ngx_uint_t align)
146 {
123 u_char *m; 147 u_char *m;
124 ngx_pool_t *p; 148 ngx_pool_t *p;
125 149
126 if (size <= pool->max) { 150 p = pool->current;
127 151
128 p = pool->current; 152 do {
129 153 m = p->d.last;
130 do { 154
131 m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT); 155 if (align) {
132 156 m = ngx_align_ptr(m, NGX_ALIGNMENT);
133 if ((size_t) (p->d.end - m) >= size) { 157 }
134 p->d.last = m + size; 158
135 159 if ((size_t) (p->d.end - m) >= size) {
136 return m; 160 p->d.last = m + size;
137 } 161
138 162 return m;
139 p = p->d.next; 163 }
140 164
141 } while (p); 165 p = p->d.next;
142 166
143 return ngx_palloc_block(pool, size); 167 } while (p);
144 } 168
145 169 return ngx_palloc_block(pool, size);
146 return ngx_palloc_large(pool, size);
147 }
148
149
150 void *
151 ngx_pnalloc(ngx_pool_t *pool, size_t size)
152 {
153 u_char *m;
154 ngx_pool_t *p;
155
156 if (size <= pool->max) {
157
158 p = pool->current;
159
160 do {
161 m = p->d.last;
162
163 if ((size_t) (p->d.end - m) >= size) {
164 p->d.last = m + size;
165
166 return m;
167 }
168
169 p = p->d.next;
170
171 } while (p);
172
173 return ngx_palloc_block(pool, size);
174 }
175
176 return ngx_palloc_large(pool, size);
177 } 170 }
178 171
179 172
180 static void * 173 static void *
181 ngx_palloc_block(ngx_pool_t *pool, size_t size) 174 ngx_palloc_block(ngx_pool_t *pool, size_t size)