Mercurial > hg > nginx
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) |