libe3 0.2.5
C++ library for E3AP RAN vendor integration
Loading...
Searching...
No Matches
latrec.c File Reference

Per-thread ring storage and sequence allocator for latrec. More...

#include "libe3/latrec.h"
#include <errno.h>
#include <pthread.h>
#include <sys/syscall.h>

Go to the source code of this file.

Macros

#define LATREC_TLS_ENTRIES_LOG2   18 /* 256 K records = 8 MiB per thread */
#define LATREC_ENTRIES_LOG2_MIN   12
#define LATREC_ENTRIES_LOG2_MAX   28
#define LATREC_MAX_RINGS   64

Functions

static void flush_open_rings (void)
static void install_atexit (void)
static unsigned entries_log2_from (const char *name)
static unsigned entries_log2 (const char *role)
void latrec_set_output_dir (const char *dir)
latrec_t * latrec_tls_open_as (const char *role)
latrec_t * latrec_tls_open (void)
uint64_t latrec_seq_next (void)

Variables

static latrec_t disabled_ring
__thread latrec_t * latrec_tls = &disabled_ring
static latrec_t * open_rings [64]
static int n_open_rings
static pthread_mutex_t rings_mu = PTHREAD_MUTEX_INITIALIZER
static pthread_once_t atexit_once = PTHREAD_ONCE_INIT
static char output_dir [512]

Detailed Description

Per-thread ring storage and sequence allocator for latrec.

latrec.h is usable on its own with an explicitly owned latrec_t. This file backs the convenience API on top of it: one ring per calling thread, opened on first stamp and named <prefix>.<tid>, plus the process-wide sequence counter. Keeping the storage in one translation unit gives a single ring per thread rather than one per includer.

SPDX-FileCopyrightText: Copyright (c) 2026 Northeastern University SPDX-License-Identifier: Apache-2.0

Definition in file latrec.c.

Macro Definition Documentation

◆ LATREC_ENTRIES_LOG2_MAX

#define LATREC_ENTRIES_LOG2_MAX   28

Definition at line 37 of file latrec.c.

◆ LATREC_ENTRIES_LOG2_MIN

#define LATREC_ENTRIES_LOG2_MIN   12

Definition at line 36 of file latrec.c.

◆ LATREC_MAX_RINGS

#define LATREC_MAX_RINGS   64

Definition at line 38 of file latrec.c.

◆ LATREC_TLS_ENTRIES_LOG2

#define LATREC_TLS_ENTRIES_LOG2   18 /* 256 K records = 8 MiB per thread */

Definition at line 34 of file latrec.c.

Function Documentation

◆ entries_log2()

unsigned entries_log2 ( const char * role)
static

Definition at line 86 of file latrec.c.

◆ entries_log2_from()

unsigned entries_log2_from ( const char * name)
static

Definition at line 66 of file latrec.c.

◆ flush_open_rings()

void flush_open_rings ( void )
static

Definition at line 55 of file latrec.c.

◆ install_atexit()

void install_atexit ( void )
static

Definition at line 62 of file latrec.c.

◆ latrec_seq_next()

uint64_t latrec_seq_next ( void )

Definition at line 159 of file latrec.c.

◆ latrec_set_output_dir()

void latrec_set_output_dir ( const char * dir)

Definition at line 109 of file latrec.c.

◆ latrec_tls_open()

latrec_t * latrec_tls_open ( void )

Definition at line 157 of file latrec.c.

◆ latrec_tls_open_as()

latrec_t * latrec_tls_open_as ( const char * role)

Definition at line 117 of file latrec.c.

Variable Documentation

◆ atexit_once

pthread_once_t atexit_once = PTHREAD_ONCE_INIT
static

Definition at line 50 of file latrec.c.

◆ disabled_ring

latrec_t disabled_ring
static

Definition at line 43 of file latrec.c.

◆ latrec_tls

__thread latrec_t* latrec_tls = &disabled_ring

Definition at line 45 of file latrec.c.

◆ n_open_rings

int n_open_rings
static

Definition at line 48 of file latrec.c.

◆ open_rings

latrec_t* open_rings[64]
static

Definition at line 47 of file latrec.c.

◆ output_dir

char output_dir[512]
static

Definition at line 107 of file latrec.c.

◆ rings_mu

pthread_mutex_t rings_mu = PTHREAD_MUTEX_INITIALIZER
static

Definition at line 49 of file latrec.c.