Skip to content

rngJitterRead(): timer-counter thread остается жить и постоянно загружает одно CPU-ядро #76

Description

@miniusercoder

В lib/bee2/src/core/rng/rng_timer.c источник энтропии "jitter" запускает внутренний timer-counter thread через tmCtrStart() / tmCtrCreate().

На Unix поток выполняет бесконечный активный цикл:

static void* tmCtrLoop(void* args)
{
    while (_tm_ctr_loop)
         _tm_ctr_ticks++;
    return 0;
}

После первого вызова rngJitterRead() этот поток остается жить до завершения процесса через utilOnExit(tmCtrClose). В долгоживущем приложении это приводит к постоянной загрузке одного CPU-ядра на 100% даже в полном простое.

Наблюдаемое поведение

  • В процессе появляется один дополнительный поток.
  • Поток постоянно потребляет 100% одного CPU-ядра.
  • Нагрузка сохраняется после завершения чтения энтропии и продолжается весь runtime процесса.

Ожидаемое поведение

Timer-counter thread должен быть активен только во время фактического чтения jitter-энтропии либо должен иметь режим ожидания, не занимающий CPU постоянно.

Для долгоживущих приложений важно, чтобы после rngJitterRead() не оставался служебный поток, выполняющий busy-loop без полезной работы.

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions