Mercurial > hg > nginx-quic
comparison src/core/ngx_slab.c @ 7049:94f30939545a
Slab: style.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Tue, 04 Jul 2017 18:32:28 +0300 |
parents | e4590dfd97ff |
children | 8c5e3cc21332 |
comparison
equal
deleted
inserted
replaced
7048:80224192163c | 7049:94f30939545a |
---|---|
179 | 179 |
180 void * | 180 void * |
181 ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size) | 181 ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size) |
182 { | 182 { |
183 size_t s; | 183 size_t s; |
184 uintptr_t p, n, m, mask, *bitmap; | 184 uintptr_t p, m, mask, *bitmap; |
185 ngx_uint_t i, slot, shift, map; | 185 ngx_uint_t i, n, slot, shift, map; |
186 ngx_slab_page_t *page, *prev, *slots; | 186 ngx_slab_page_t *page, *prev, *slots; |
187 | 187 |
188 if (size > ngx_slab_max_size) { | 188 if (size > ngx_slab_max_size) { |
189 | 189 |
190 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, ngx_cycle->log, 0, | 190 ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, ngx_cycle->log, 0, |
224 | 224 |
225 if (shift < ngx_slab_exact_shift) { | 225 if (shift < ngx_slab_exact_shift) { |
226 | 226 |
227 bitmap = (uintptr_t *) ngx_slab_page_addr(pool, page); | 227 bitmap = (uintptr_t *) ngx_slab_page_addr(pool, page); |
228 | 228 |
229 map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8); | 229 map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t)); |
230 | 230 |
231 for (n = 0; n < map; n++) { | 231 for (n = 0; n < map; n++) { |
232 | 232 |
233 if (bitmap[n] != NGX_SLAB_BUSY) { | 233 if (bitmap[n] != NGX_SLAB_BUSY) { |
234 | 234 |
237 continue; | 237 continue; |
238 } | 238 } |
239 | 239 |
240 bitmap[n] |= m; | 240 bitmap[n] |= m; |
241 | 241 |
242 i = (n * sizeof(uintptr_t) * 8 + i) << shift; | 242 i = (n * 8 * sizeof(uintptr_t) + i) << shift; |
243 | 243 |
244 p = (uintptr_t) bitmap + i; | 244 p = (uintptr_t) bitmap + i; |
245 | 245 |
246 pool->stats[slot].used++; | 246 pool->stats[slot].used++; |
247 | 247 |
339 } | 339 } |
340 | 340 |
341 /* "n" elements for bitmap, plus one requested */ | 341 /* "n" elements for bitmap, plus one requested */ |
342 bitmap[0] = ((uintptr_t) 2 << n) - 1; | 342 bitmap[0] = ((uintptr_t) 2 << n) - 1; |
343 | 343 |
344 map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8); | 344 map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t)); |
345 | 345 |
346 for (i = 1; i < map; i++) { | 346 for (i = 1; i < map; i++) { |
347 bitmap[i] = 0; | 347 bitmap[i] = 0; |
348 } | 348 } |
349 | 349 |
367 page->next = &slots[slot]; | 367 page->next = &slots[slot]; |
368 page->prev = (uintptr_t) &slots[slot] | NGX_SLAB_EXACT; | 368 page->prev = (uintptr_t) &slots[slot] | NGX_SLAB_EXACT; |
369 | 369 |
370 slots[slot].next = page; | 370 slots[slot].next = page; |
371 | 371 |
372 pool->stats[slot].total += sizeof(uintptr_t) * 8; | 372 pool->stats[slot].total += 8 * sizeof(uintptr_t); |
373 | 373 |
374 p = ngx_slab_page_addr(pool, page); | 374 p = ngx_slab_page_addr(pool, page); |
375 | 375 |
376 pool->stats[slot].used++; | 376 pool->stats[slot].used++; |
377 | 377 |
478 if ((uintptr_t) p & (size - 1)) { | 478 if ((uintptr_t) p & (size - 1)) { |
479 goto wrong_chunk; | 479 goto wrong_chunk; |
480 } | 480 } |
481 | 481 |
482 n = ((uintptr_t) p & (ngx_pagesize - 1)) >> shift; | 482 n = ((uintptr_t) p & (ngx_pagesize - 1)) >> shift; |
483 m = (uintptr_t) 1 << (n % (sizeof(uintptr_t) * 8)); | 483 m = (uintptr_t) 1 << (n % (8 * sizeof(uintptr_t))); |
484 n /= sizeof(uintptr_t) * 8; | 484 n /= 8 * sizeof(uintptr_t); |
485 bitmap = (uintptr_t *) | 485 bitmap = (uintptr_t *) |
486 ((uintptr_t) p & ~((uintptr_t) ngx_pagesize - 1)); | 486 ((uintptr_t) p & ~((uintptr_t) ngx_pagesize - 1)); |
487 | 487 |
488 if (bitmap[n] & m) { | 488 if (bitmap[n] & m) { |
489 slot = shift - pool->min_shift; | 489 slot = shift - pool->min_shift; |
508 | 508 |
509 if (bitmap[0] & ~(((uintptr_t) 1 << n) - 1)) { | 509 if (bitmap[0] & ~(((uintptr_t) 1 << n) - 1)) { |
510 goto done; | 510 goto done; |
511 } | 511 } |
512 | 512 |
513 map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8); | 513 map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t)); |
514 | 514 |
515 for (i = 1; i < map; i++) { | 515 for (i = 1; i < map; i++) { |
516 if (bitmap[i]) { | 516 if (bitmap[i]) { |
517 goto done; | 517 goto done; |
518 } | 518 } |
556 goto done; | 556 goto done; |
557 } | 557 } |
558 | 558 |
559 ngx_slab_free_pages(pool, page, 1); | 559 ngx_slab_free_pages(pool, page, 1); |
560 | 560 |
561 pool->stats[slot].total -= sizeof(uintptr_t) * 8; | 561 pool->stats[slot].total -= 8 * sizeof(uintptr_t); |
562 | 562 |
563 goto done; | 563 goto done; |
564 } | 564 } |
565 | 565 |
566 goto chunk_already_free; | 566 goto chunk_already_free; |