Default RNG now uses static, thread-local memory instead of heap

allocated
This commit is contained in:
Bruce Hill 2024-12-19 15:16:33 -05:00
parent 88d1bde371
commit 221f4ad7ea
3 changed files with 4 additions and 4 deletions

View File

@ -18,14 +18,14 @@
#include "chacha.h"
public RNG_t default_rng = NULL;
struct RNGState_t {
chacha_ctx chacha;
size_t unused_bytes;
uint8_t random_bytes[1024];
};
public _Thread_local RNG_t default_rng = (struct RNGState_t[1]){};
PUREFUNC static Text_t RNG$as_text(const void *rng, bool colorize, const TypeInfo_t*)
{
if (!rng) return Text("RNG");

View File

@ -26,6 +26,6 @@ Num_t RNG$num(RNG_t rng, Num_t min, Num_t max);
Num32_t RNG$num32(RNG_t rng, Num32_t min, Num32_t max);
extern const TypeInfo_t RNG$info;
extern RNG_t default_rng;
extern _Thread_local RNG_t default_rng;
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0

View File

@ -54,7 +54,7 @@ public void tomo_init(void)
if (read(rng_fd, (void*)random_bytes, 40) < 40)
fail("Couldn't read from /dev/urandom");
Array_t rng_seed = {.length=40, .data=random_bytes, .stride=1, .atomic=1};
default_rng = RNG$new(rng_seed);
RNG$set_seed(default_rng, rng_seed);
if (register_printf_specifier('k', printf_text, printf_text_size))
errx(1, "Couldn't set printf specifier");