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;