DTS Application Library
0.2.3
Application library containing referenced objects and interfaces to common libraries
|
Utilities for managing referenced lockable objects. More...
Modules | |
Hashed bucket linked lists of referenced objects | |
Store references in and retrive from linked lists based on a hash. | |
Files | |
file | refobj.c |
Referenced Lockable Objects. | |
Data Structures | |
struct | ref_obj |
Internal structure of all referenced objects. More... | |
Macros | |
#define | clearflag(obj, flag) |
Atomically clear a flag in the flags field of a referenced object. More... | |
#define | setflag(obj, flag) |
Atomically set a flag in the flags field of a referenced object. More... | |
#define | testflag(obj, flag) (objlock(obj) | (obj->flags & flag) | objunlock(obj)) |
Atomically test a flag in the flags field of a referenced object. More... | |
#define | DTS_OJBREF_CLASS(classtype) |
Add this macro to a C++ class to add refobj support. More... | |
#define | REFOBJ_MAGIC 0xdeadc0de |
Magic number stored as first field of all referenced objects. More... | |
#define | refobj_offset sizeof(struct ref_obj); |
The size of ref_obj is the offset for the data. More... | |
Typedefs | |
typedef void(* | objdestroy )(void *) |
Callback used to clean data of a reference object when it is to be freed. More... | |
Functions | |
void * | objalloc (int size, objdestroy destructor) |
Allocate a referenced lockable object. More... | |
int | objref (void *data) |
Reference a object. More... | |
int | objunref (void *data) |
Drop reference held. More... | |
int | objcnt (void *data) |
Return current reference count. More... | |
int | objsize (void *data) |
Size requested for data. More... | |
int | objlock (void *data) |
Lock the reference. More... | |
int | objtrylock (void *data) |
Try lock a reference. More... | |
int | objunlock (void *data) |
Unlock a reference. More... | |
void * | objchar (const char *orig) |
Return a reference to copy of a buffer. More... | |
Utilities for managing referenced lockable objects.
#define clearflag | ( | obj, | |
flag | |||
) |
#define DTS_OJBREF_CLASS | ( | classtype | ) |
Add this macro to a C++ class to add refobj support.
This macro defines operator overloads for new/delete and declares a destructor.
#define REFOBJ_MAGIC 0xdeadc0de |
Magic number stored as first field of all referenced objects.
Definition at line 34 of file refobj.c.
Referenced by objalloc(), objcnt(), objlock(), objref(), objsize(), objtrylock(), objunlock(), and objunref().
#define refobj_offset sizeof(struct ref_obj); |
The size of ref_obj is the offset for the data.
Definition at line 119 of file refobj.c.
Referenced by addtobucket(), objalloc(), objcnt(), objlock(), objref(), objsize(), objtrylock(), objunlock(), and objunref().
#define setflag | ( | obj, | |
flag | |||
) |
Atomically set a flag in the flags field of a referenced object.
Definition at line 925 of file dtsapp.h.
Referenced by close_socket(), dtls_listenssl(), framework_mkthread(), jointhreads(), nf_ctrack_endtrace(), socketwrite_d(), stopthreads(), and tlsaccept().
Atomically test a flag in the flags field of a referenced object.
Definition at line 932 of file dtsapp.h.
Referenced by framework_mkthread(), framework_threadok(), socketread_d(), and socketwrite_d().
typedef void(* objdestroy)(void *) |
void* objalloc | ( | int | size, |
objdestroy | destructor | ||
) |
Allocate a referenced lockable object.
Use malloc to allocate memory to contain the data lock and reference the lock is initialised magic and reference set. The data begins at the end of the ref_obj set a pointer to it and return.
size | Size of the data buffer to allocate in addition to the reference. |
destructor | Function called before the memory is freed to cleanup. |
Definition at line 129 of file refobj.c.
References ref_obj::cnt, ref_obj::data, ref_obj::destroy, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, refobj_offset, and ref_obj::size.
Referenced by accept_socket(), add_radserver(), b64enc_buf(), create_bucketlist(), create_kernmac(), create_kernvlan(), curl_newauth(), curl_newpost(), curl_setauth_cb(), curl_setprogress(), curlinit(), dtls_listenssl(), framework_mkcore(), framework_mkthread(), get_ifinfo(), init_bucket_loop(), ldap_addinit(), ldap_connect(), ldap_modifyinit(), ldap_saslbind(), ldap_simplebind(), make_socket(), nfqueue_attach(), objchar(), rfc6296_map_add(), set_interface_addr(), set_interface_flags(), set_interface_ipaddr(), set_interface_name(), startthreads(), tlsaccept(), unixsocket_server(), xml_doctobuffer(), xml_getfirstnode(), xml_init(), xml_loadbuf(), xml_loaddoc(), xml_xpath(), xslt_addparam(), xslt_apply_buffer(), xslt_init(), xslt_open(), and zcompress().
void* objchar | ( | const char * | orig | ) |
Return a reference to copy of a buffer.
orig | Original buffer to copy. |
Definition at line 330 of file refobj.c.
References objalloc().
int objcnt | ( | void * | data | ) |
Return current reference count.
data | Pointer to determine active reference count. |
Definition at line 222 of file refobj.c.
References ref_obj::cnt, ref_obj::data, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, and refobj_offset.
Referenced by ldap_unref_attr(), and ldap_unref_entry().
int objlock | ( | void * | data | ) |
Lock the reference.
data | Reference to lock |
Definition at line 269 of file refobj.c.
References ref_obj::data, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, and refobj_offset.
Referenced by accept_socket(), addtobucket(), bucket_list_cnt(), create_kernmac(), create_kernvlan(), curl_postitem(), curlinit(), dtls_listenssl(), dtlshandltimeout(), dtlstimeout(), dtsl_serveropts(), framework_mkthread(), get_iface_index(), jointhreads(), ldap_doadd(), ldap_domodify(), ldap_saslbind(), ldap_simplebind(), nf_ctrack_delete(), nf_ctrack_dump(), nf_ctrack_nat(), nfqueue_attach(), remove_bucket_item(), remove_bucket_loop(), set_interface_addr(), set_interface_flags(), set_interface_ipaddr(), set_interface_name(), socketread_d(), socketserver(), socketwrite_d(), ssl_shutdown(), stopthreads(), url_escape(), url_unescape(), xml_addnode(), xml_appendnode(), xml_createpath(), xml_delete(), xml_doctobuffer(), xml_getfirstnode(), xml_getnextnode(), xml_getrootnode(), xml_modify(), xml_savefile(), xml_setattr(), xml_unlink(), xml_xpath(), xslt_addparam(), xslt_apply(), xslt_apply_buffer(), and xslt_clearparam().
int objref | ( | void * | data | ) |
Reference a object.
data | Data to obtain reference for. |
Definition at line 153 of file refobj.c.
References ref_obj::cnt, ref_obj::data, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, and refobj_offset.
Referenced by addtobucket(), bucket_list_find_key(), create_kernmac(), create_kernvlan(), curl_setauth_cb(), curl_setprogress(), curlinit(), framework_init(), framework_mkthread(), get_category_next(), get_config_category(), get_config_file(), get_iface_index(), ifhwaddr(), init_bucket_loop(), jointhreads(), ldap_domodify(), ldap_saslbind(), ldap_simplebind(), ldap_simplerebind(), mcast_socket(), next_bucket_loop(), set_interface_addr(), set_interface_flags(), set_interface_ipaddr(), set_interface_name(), startthreads(), stopthreads(), unixsocket_client(), unixsocket_server(), xml_addnode(), xml_appendnode(), xml_createpath(), xml_getfirstnode(), xml_getnextnode(), xml_getnodes(), xml_init(), xml_xpath(), xslt_addparam(), and xslt_init().
int objsize | ( | void * | data | ) |
Size requested for data.
data | Pointer to data to obtain size of. |
Definition at line 246 of file refobj.c.
References ref_obj::data, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, refobj_offset, and ref_obj::size.
int objtrylock | ( | void * | data | ) |
Try lock a reference.
data | Reference to attempt to lock. |
Definition at line 285 of file refobj.c.
References ref_obj::data, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, and refobj_offset.
int objunlock | ( | void * | data | ) |
Unlock a reference.
data | Reference to unlock. |
Definition at line 301 of file refobj.c.
References ref_obj::data, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, and refobj_offset.
Referenced by accept_socket(), addtobucket(), bucket_list_cnt(), create_kernmac(), create_kernvlan(), curl_postitem(), curlinit(), dtls_listenssl(), dtlshandltimeout(), dtlstimeout(), dtsl_serveropts(), framework_mkthread(), get_iface_index(), jointhreads(), ldap_doadd(), ldap_domodify(), ldap_saslbind(), ldap_simplebind(), nf_ctrack_delete(), nf_ctrack_dump(), nf_ctrack_nat(), nfqueue_attach(), remove_bucket_item(), remove_bucket_loop(), set_interface_addr(), set_interface_flags(), set_interface_ipaddr(), set_interface_name(), socketread_d(), socketserver(), socketwrite_d(), ssl_shutdown(), stopthreads(), url_escape(), url_unescape(), xml_addnode(), xml_appendnode(), xml_createpath(), xml_delete(), xml_doctobuffer(), xml_getfirstnode(), xml_getnextnode(), xml_getrootnode(), xml_modify(), xml_savefile(), xml_setattr(), xml_unlink(), xml_xpath(), xslt_addparam(), xslt_apply(), xslt_apply_buffer(), and xslt_clearparam().
int objunref | ( | void * | data | ) |
Drop reference held.
If the reference is the last reference call the destructor to clean up and then free the memory used.
data | Data we are droping a reference for |
Definition at line 184 of file refobj.c.
References ref_obj::cnt, ref_obj::data, ref_obj::destroy, ref_obj::lock, ref_obj::magic, REFOBJ_MAGIC, refobj_offset, and ref_obj::size.
Referenced by accept_socket(), add_radserver(), addtobucket(), bucket_list_find_key(), bucketlist_callback(), close_socket(), closenetlink(), create_kernmac(), create_kernvlan(), curl_setauth_cb(), curl_setprogress(), curlclose(), curlinit(), daemonize(), dtls_listenssl(), framework_init(), framework_mkcore(), framework_mkthread(), framework_threadok(), get_category_loop(), get_category_next(), get_config_category(), get_config_file(), get_iface_index(), ifhwaddr(), jointhreads(), ldap_add_attr(), ldap_addinit(), ldap_connect(), ldap_doadd(), ldap_domodify(), ldap_mod_add(), ldap_mod_addattr(), ldap_mod_del(), ldap_mod_delattr(), ldap_mod_rep(), ldap_mod_repattr(), ldap_modifyinit(), ldap_saslbind(), ldap_simplebind(), ldap_simplerebind(), ldap_unref_attr(), ldap_unref_entry(), make_socket(), mcast_socket(), nf_ctrack_close(), nf_ctrack_endtrace(), nf_ctrack_trace(), nfqueue_attach(), process_config(), remove_bucket_item(), remove_bucket_loop(), rfc6296_map_add(), rfc6296_test(), set_interface_addr(), set_interface_flags(), set_interface_ipaddr(), set_interface_name(), socketread_d(), socketwrite_d(), startthreads(), stopthreads(), thread_signal(), unixsocket_client(), unixsocket_server(), unrefconfigfiles(), url_escape(), url_unescape(), xml_addnode(), xml_appendnode(), xml_close(), xml_createpath(), xml_getattr(), xml_getfirstnode(), xml_getnextnode(), xml_loadbuf(), xml_loaddoc(), xml_xpath(), xslt_addparam(), xslt_apply(), xslt_apply_buffer(), xslt_clearparam(), and xslt_close().