GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
TINFO(3) FreeBSD Library Functions Manual TINFO(3)

tinfo
self-(de)allocating thread-local data structures

PDEL Library (libpdel, -lpdel)

#include <pthread.h>
#include <pdel/util/tinfo.h>

TINFO_INIT(type, mtype, initfunc);

void *
tinfo_get(struct tinfo *t);

int
tinfo_set(struct tinfo *t, const void *data);

int
tinfo_set_nocopy(struct tinfo *t, void *data);

These functions provide support for thread-local data structures defined by structs(3) types that are automatically initialized and destroyed. A thread-local data structure is described by a static or global struct tinfo; each such structure must be initialized with the TINFO_INIT() macro. For example:

static struct tinfo foo_info
        = TINFO_INIT(&foo_type, "foo", fooinit);

type is the structs(3) type for the data structure, mtype is the typed_mem(3) type used to allocate memory to hold each thread's instance, and initfunc is an optional instance initializer function of this type:

typedef int tinfo_init_t(struct tinfo *t, void *data);

initfunc() should initialize the data structure pointed to by data as an instance of type (which will also be available as t->type). The memory pointed to by data will have been allocated with typed_mem(3) type mtype but will be otherwise uninitialized. If initfunc is NULL, then structs_init(3) is used to initialize the data structure to the default value defined by type.

Instances of tinfo thread-local data structure are automatically destroyed when the associated thread exits, by calling structs_free(type, NULL, data) and then FREE(mtype, data).

tinfo_get() returns the current thread's instance of the data structure. If this is the thread's first invocation of tinfo_get(), a new instance is automatically allocated and initialized. The caller should not free the returned value, but may modify it in a way consistent with its structs(3) type.

tinfo_set() sets the current thread's data structure instance to be a copy of data, made using structs_get(3). The original data is unmodified and remains the caller's responsibility to free. Any existing thread-local data structure instance is automatically replaced and freed.

tinfo_set_nocopy() is equivalent to tinfo_set() except that no copy of data is made; therefore, data must point to heap memory allocated with typed_mem(3) type mtype (also available as t->mtype) and the caller should not dereference data once tinfo_set_nocopy() has returned successfully.

Both tinfo_set() and tinfo_set_nocopy() may take a NULL data parameter; this causes any existing thread-local data structure instance to be freed so that the next call to tinfo_get() will cause a new instance to be constructed.

tinfo_get(), tinfo_set(), and tinfo_set_nocopy() return NULL or -1 with errno set appropriately to indicate an error.

libpdel(3), structs(3), typed_mem(3)

The PDEL library was developed at Packet Design, LLC. http://www.packetdesign.com/

Archie Cobbs ⟨archie@freebsd.org⟩
April 22, 2002 FreeBSD 13.1-RELEASE

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.