nxt_event_engine.c (611:323e11065f83) nxt_event_engine.c (1266:22a29a8b15e2)
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8

--- 542 unchanged lines hidden (view full) ---

551 now = nxt_thread_monotonic_time(thr) / 1000000;
552
553 nxt_timer_expire(engine, now);
554 }
555}
556
557
558void *
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8

--- 542 unchanged lines hidden (view full) ---

551 now = nxt_thread_monotonic_time(thr) / 1000000;
552
553 nxt_timer_expire(engine, now);
554 }
555}
556
557
558void *
559nxt_event_engine_mem_alloc(nxt_event_engine_t *engine, uint8_t *slot,
559nxt_event_engine_mem_alloc(nxt_event_engine_t *engine, uint8_t *hint,
560 size_t size)
561{
560 size_t size)
561{
562 uint8_t n;
562 uint32_t n;
563 nxt_uint_t items;
564 nxt_array_t *mem_cache;
565 nxt_mem_cache_t *cache;
566 nxt_mem_cache_block_t *block;
567
568 mem_cache = engine->mem_cache;
563 nxt_uint_t items;
564 nxt_array_t *mem_cache;
565 nxt_mem_cache_t *cache;
566 nxt_mem_cache_block_t *block;
567
568 mem_cache = engine->mem_cache;
569 n = *slot;
569 n = *hint;
570
570
571 if (n == (uint8_t) -1) {
571 if (n == NXT_EVENT_ENGINE_NO_MEM_HINT) {
572
573 if (mem_cache == NULL) {
574 /* IPv4 nxt_sockaddr_t and HTTP/1 and HTTP/2 buffers. */
575 items = 3;
576#if (NXT_INET6)
577 items++;
578#endif
579#if (NXT_HAVE_UNIX_DOMAIN)

--- 22 unchanged lines hidden (view full) ---

602 }
603
604 cache->free = NULL;
605 cache->size = size;
606 cache->count = 0;
607
608 found:
609
572
573 if (mem_cache == NULL) {
574 /* IPv4 nxt_sockaddr_t and HTTP/1 and HTTP/2 buffers. */
575 items = 3;
576#if (NXT_INET6)
577 items++;
578#endif
579#if (NXT_HAVE_UNIX_DOMAIN)

--- 22 unchanged lines hidden (view full) ---

602 }
603
604 cache->free = NULL;
605 cache->size = size;
606 cache->count = 0;
607
608 found:
609
610 *slot = n;
610 if (n < NXT_EVENT_ENGINE_NO_MEM_HINT) {
611 *hint = (uint8_t) n;
612 }
611 }
612
613 cache = mem_cache->elts;
614 cache = cache + n;
615
616 block = cache->free;
617
618 if (block != NULL) {
619 cache->free = block->next;
620 cache->count--;
621 return block;
622 }
623
624 return nxt_mp_alloc(engine->mem_pool, size);
625}
626
627
628void
613 }
614
615 cache = mem_cache->elts;
616 cache = cache + n;
617
618 block = cache->free;
619
620 if (block != NULL) {
621 cache->free = block->next;
622 cache->count--;
623 return block;
624 }
625
626 return nxt_mp_alloc(engine->mem_pool, size);
627}
628
629
630void
629nxt_event_engine_mem_free(nxt_event_engine_t *engine, uint8_t *slot, void *p)
631nxt_event_engine_mem_free(nxt_event_engine_t *engine, uint8_t hint, void *p,
632 size_t size)
630{
633{
634 uint32_t n;
635 nxt_array_t *mem_cache;
631 nxt_mem_cache_t *cache;
632 nxt_mem_cache_block_t *block;
633
634 block = p;
636 nxt_mem_cache_t *cache;
637 nxt_mem_cache_block_t *block;
638
639 block = p;
640 mem_cache = engine->mem_cache;
641 cache = mem_cache->elts;
635
642
636 cache = engine->mem_cache->elts;
637 cache = cache + *slot;
643 n = hint;
638
644
645 if (nxt_slow_path(n == NXT_EVENT_ENGINE_NO_MEM_HINT)) {
646
647 if (size != 0) {
648 for (n = 0; n < mem_cache->nelts; n++) {
649 if (cache[n].size == size) {
650 goto found;
651 }
652 }
653
654 nxt_alert(&engine->task,
655 "event engine mem free(%p, %z) not found", p, size);
656 }
657
658 goto done;
659 }
660
661found:
662
663 cache = cache + n;
664
639 if (cache->count < 16) {
640 cache->count++;
641 block->next = cache->free;
642 cache->free = block;
643
644 return;
645 }
646
665 if (cache->count < 16) {
666 cache->count++;
667 block->next = cache->free;
668 cache->free = block;
669
670 return;
671 }
672
673done:
674
647 nxt_mp_free(engine->mem_pool, p);
648}
649
650
651#if (NXT_DEBUG)
652
653void nxt_event_engine_thread_adopt(nxt_event_engine_t *engine)
654{
655 nxt_work_queue_thread_adopt(&engine->fast_work_queue);
656 nxt_work_queue_thread_adopt(&engine->accept_work_queue);
657 nxt_work_queue_thread_adopt(&engine->read_work_queue);
658 nxt_work_queue_thread_adopt(&engine->socket_work_queue);
659 nxt_work_queue_thread_adopt(&engine->connect_work_queue);
660 nxt_work_queue_thread_adopt(&engine->write_work_queue);
661 nxt_work_queue_thread_adopt(&engine->shutdown_work_queue);
662 nxt_work_queue_thread_adopt(&engine->close_work_queue);
663}
664
665#endif
675 nxt_mp_free(engine->mem_pool, p);
676}
677
678
679#if (NXT_DEBUG)
680
681void nxt_event_engine_thread_adopt(nxt_event_engine_t *engine)
682{
683 nxt_work_queue_thread_adopt(&engine->fast_work_queue);
684 nxt_work_queue_thread_adopt(&engine->accept_work_queue);
685 nxt_work_queue_thread_adopt(&engine->read_work_queue);
686 nxt_work_queue_thread_adopt(&engine->socket_work_queue);
687 nxt_work_queue_thread_adopt(&engine->connect_work_queue);
688 nxt_work_queue_thread_adopt(&engine->write_work_queue);
689 nxt_work_queue_thread_adopt(&engine->shutdown_work_queue);
690 nxt_work_queue_thread_adopt(&engine->close_work_queue);
691}
692
693#endif