2019-03-18 16:17:43 +00:00
|
|
|
/*! \file talloc.h */
|
2015-12-05 22:38:18 +00:00
|
|
|
#pragma once
|
|
|
|
#include <talloc.h>
|
2019-03-18 16:17:43 +00:00
|
|
|
|
|
|
|
/*! per-thread talloc contexts. This works around the problem that talloc is not
|
|
|
|
* thread-safe. However, one can simply have a different set of talloc contexts for each
|
|
|
|
* thread, and ensure that allocations made on one thread are always only free'd on that
|
|
|
|
* very same thread.
|
|
|
|
* WARNING: Users must make sure they free() on the same thread as they allocate!! */
|
|
|
|
struct osmo_talloc_contexts {
|
|
|
|
/*! global per-thread talloc context. */
|
|
|
|
void *global;
|
|
|
|
/*! volatile select-dispatch context. This context is completely free'd and
|
|
|
|
* re-created every time the main select loop in osmo_select_main() returns from
|
|
|
|
* select(2) and calls per-fd callback functions. This allows users of this
|
|
|
|
* facility to allocate temporary objects like string buffers, message buffers
|
|
|
|
* and the like which are automatically free'd when going into the next select()
|
|
|
|
* system call */
|
|
|
|
void *select;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern __thread struct osmo_talloc_contexts *osmo_ctx;
|
|
|
|
|
|
|
|
/* short-hand #defines for the osmo talloc contexts (OTC) that can be used to pass
|
|
|
|
* to the various _c functions like msgb_alloc_c() */
|
|
|
|
#define OTC_GLOBAL (osmo_ctx->global)
|
|
|
|
#define OTC_SELECT (osmo_ctx->select)
|
2020-12-28 21:25:45 +00:00
|
|
|
|
|
|
|
int osmo_ctx_init(const char *id);
|