File lock_free.c
FileList > base > lock_free.c
Go to the source code of this file
#include "config.h"
#include <assert.h>
#include "porting.h"
#include "lock_free.h"
#include "error_manager.h"
#include "error_code.h"
#include "memory_alloc.h"
#include "memory_wrapper.hpp"
Public Attributes
| Type |
Name |
| LF_TRAN_SYSTEM |
catalog_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
dwb_slots_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
fpcache_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
free_sort_list_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
global_unique_stats_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
hfid_table_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
obj_lock_ent_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
obj_lock_res_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
sessions_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
spage_saving_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
| LF_TRAN_SYSTEM |
xcache_Ts = { [**NULL**](freelistheap_8h.md#define-null), 0, {}, 0, 0, 100, 0, [**NULL**](freelistheap_8h.md#define-null) }
|
Public Static Attributes
Public Functions
| Type |
Name |
| int |
lf_callback_vpid_compare (void * vpid_1, void * vpid_2)
|
| int |
lf_callback_vpid_copy (void * src, void * dest)
|
| unsigned int |
lf_callback_vpid_hash (void * vpid, int htsize)
|
| void |
lf_destroy_transaction_systems (void)
|
| void * |
lf_freelist_claim (LF_TRAN_ENTRY * tran_entry, LF_FREELIST * freelist)
|
| void |
lf_freelist_destroy (LF_FREELIST * freelist)
|
| int |
lf_freelist_init (LF_FREELIST * freelist, int initial_blocks, int block_size, LF_ENTRY_DESCRIPTOR * edesc, LF_TRAN_SYSTEM * tran_system)
|
| int |
lf_freelist_retire (LF_TRAN_ENTRY * tran_entry, LF_FREELIST * freelist, void * entry)
|
| int |
lf_freelist_transport (LF_TRAN_ENTRY * tran_entry, LF_FREELIST * freelist)
|
| void |
lf_hash_clear (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table)
|
| void |
lf_hash_create_iterator (LF_HASH_TABLE_ITERATOR * iterator, LF_TRAN_ENTRY * tran_entry, LF_HASH_TABLE * table)
|
| int |
lf_hash_delete (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, int * success)
|
| int |
lf_hash_delete_already_locked (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void * locked_entry, int * success)
|
| void |
lf_hash_destroy (LF_HASH_TABLE * table)
|
| int |
lf_hash_find (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry)
|
| int |
lf_hash_find_or_insert (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry, int * inserted)
|
| int |
lf_hash_init (LF_HASH_TABLE * table, LF_FREELIST * freelist, unsigned int hash_size, LF_ENTRY_DESCRIPTOR * edesc)
|
| int |
lf_hash_insert (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry, int * inserted)
|
| int |
lf_hash_insert_given (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void ** entry, int * inserted)
|
| void * |
lf_hash_iterate (LF_HASH_TABLE_ITERATOR * it)
|
| int |
lf_initialize_transaction_systems (int max_threads)
|
| int |
lf_io_list_find (void ** list_p, void * key, LF_ENTRY_DESCRIPTOR * edesc, void ** entry)
|
| int |
lf_io_list_find_or_insert (void ** list_p, void * new_entry, LF_ENTRY_DESCRIPTOR * edesc, void ** entry)
|
| int |
lf_list_delete (LF_TRAN_ENTRY * tran, void ** list_p, void * key, void * locked_entry, int * behavior_flags, LF_ENTRY_DESCRIPTOR * edesc, LF_FREELIST * freelist, int * success)
|
| int |
lf_list_find (LF_TRAN_ENTRY * tran, void ** list_p, void * key, int * behavior_flags, LF_ENTRY_DESCRIPTOR * edesc, void ** entry)
|
| void * |
lf_stack_pop (void ** top, LF_ENTRY_DESCRIPTOR * edesc)
|
| int |
lf_stack_push (void ** top, void * entry, LF_ENTRY_DESCRIPTOR * edesc)
|
| void |
lf_tran_compute_minimum_transaction_id (LF_TRAN_SYSTEM * sys)
|
| void |
lf_tran_destroy_entry (LF_TRAN_ENTRY * entry)
|
| void |
lf_tran_end (LF_TRAN_ENTRY * entry)
|
| LF_TRAN_ENTRY * |
lf_tran_request_entry (LF_TRAN_SYSTEM * sys)
|
| void |
lf_tran_return_entry (LF_TRAN_ENTRY * entry)
|
| void |
lf_tran_start (LF_TRAN_ENTRY * entry, bool incr)
|
| void |
lf_tran_system_destroy (LF_TRAN_SYSTEM * sys)
|
| int |
lf_tran_system_init (LF_TRAN_SYSTEM * sys, int max_threads)
|
Public Static Functions
| Type |
Name |
| int |
lf_freelist_alloc_block (LF_FREELIST * freelist)
|
| int |
lf_hash_delete_internal (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, void * locked_entry, int bflags, int * success)
|
| int |
lf_hash_insert_internal (LF_TRAN_ENTRY * tran, LF_HASH_TABLE * table, void * key, int bflags, void ** entry, int * inserted)
|
| int |
lf_list_insert_internal (LF_TRAN_ENTRY * tran, void ** list_p, void * key, int * behavior_flags, LF_ENTRY_DESCRIPTOR * edesc, LF_FREELIST * freelist, void ** entry, int * inserted)
|
Macros
| Type |
Name |
| define |
ADDR_HAS_MARK (p) ((([**long**](broker__monitor_8c.md#function-timeout) [**long**](broker__monitor_8c.md#function-timeout) [**volatile**](broker__monitor_8c.md#function-timeout)) ([**p**](dynamic__load_8c.md#variable-p))) & 0x1)
|
| define |
ADDR_STRIP_MARK (p) (([**void**](broker__monitor_8c.md#function-timeout) \* [**volatile**](broker__monitor_8c.md#function-timeout)) ((([**long**](broker__monitor_8c.md#function-timeout) [**long**](broker__monitor_8c.md#function-timeout) [**volatile**](broker__monitor_8c.md#function-timeout)) ([**p**](dynamic__load_8c.md#variable-p))) & (~(([**long**](broker__monitor_8c.md#function-timeout) [**long**](broker__monitor_8c.md#function-timeout)) 0x1))))
|
| define |
ADDR_WITH_MARK (p) (([**void**](broker__monitor_8c.md#function-timeout) \* [**volatile**](broker__monitor_8c.md#function-timeout)) ((([**long**](broker__monitor_8c.md#function-timeout) [**long**](broker__monitor_8c.md#function-timeout) [**volatile**](broker__monitor_8c.md#function-timeout)) ([**p**](dynamic__load_8c.md#variable-p))) \| 0x1))
|
| define |
LF_ASSERT_USE_MUTEX_OR_TRAN_STARTED () /* multi line expression */
|
| define |
LF_END_TRAN () [**if**](dynamic__load_8c.md#function-if) (is\_tran\_started) [**lf\_tran\_end\_with\_mb**](lock__free_8h.md#define-lf_tran_end_with_mb) (tran)
|
| define |
LF_END_TRAN_FORCE () [**assert**](malloc__2__8__3_8c.md#define-assert) (is\_tran\_started); [**lf\_tran\_end\_with\_mb**](lock__free_8h.md#define-lf_tran_end_with_mb) (tran); is\_tran\_started = [**false**](broker__monitor_8c.md#function-timeout)
|
| define |
LF_END_TRAN_FORCE () [**assert**](malloc__2__8__3_8c.md#define-assert) (is\_tran\_started); [**lf\_tran\_end\_with\_mb**](lock__free_8h.md#define-lf_tran_end_with_mb) (tran); is\_tran\_started = [**false**](broker__monitor_8c.md#function-timeout)
|
| define |
LF_LOCK_ENTRY (tolock) /* multi line expression */
|
| define |
LF_LOCK_ENTRY (tolock) /* multi line expression */
|
| define |
LF_PROMOTE_TRAN_FORCE () [**assert**](malloc__2__8__3_8c.md#define-assert) (is\_tran\_started); [**MEMORY\_BARRIER**](broker__monitor_8c.md#function-timeout) (); [**lf\_tran\_start\_with\_mb**](lock__free_8h.md#define-lf_tran_start_with_mb) (tran, [**true**](broker__monitor_8c.md#function-timeout))
|
| define |
LF_START_TRAN () [**if**](dynamic__load_8c.md#function-if) (!is\_tran\_started) [**lf\_tran\_start\_with\_mb**](lock__free_8h.md#define-lf_tran_start_with_mb) (tran, [**false**](broker__monitor_8c.md#function-timeout)); is\_tran\_started = [**true**](broker__monitor_8c.md#function-timeout)
|
| define |
LF_START_TRAN_FORCE () [**assert**](malloc__2__8__3_8c.md#define-assert) (!is\_tran\_started); [**lf\_tran\_start\_with\_mb**](lock__free_8h.md#define-lf_tran_start_with_mb) (tran, [**false**](broker__monitor_8c.md#function-timeout)); is\_tran\_started = [**true**](broker__monitor_8c.md#function-timeout)
|
| define |
LF_START_TRAN_FORCE () [**assert**](malloc__2__8__3_8c.md#define-assert) (!is\_tran\_started); [**lf\_tran\_start\_with\_mb**](lock__free_8h.md#define-lf_tran_start_with_mb) (tran, [**false**](broker__monitor_8c.md#function-timeout)); is\_tran\_started = [**true**](broker__monitor_8c.md#function-timeout)
|
| define |
LF_UNITTEST_INC (lf_stat, incval)
|
| define |
LF_UNLOCK_ENTRY () /* multi line expression */
|
| define |
LF_UNLOCK_ENTRY_FORCE () /* multi line expression */
|
| define |
LF_UNLOCK_ENTRY_FORCE () /* multi line expression */
|
| define |
OF_GET_PTR (p, o) ([**void**](broker__monitor_8c.md#function-timeout) \*) ((([**char**](broker__monitor_8c.md#function-timeout) \*)([**p**](dynamic__load_8c.md#variable-p))) + (o))
|
| define |
OF_GET_PTR_DEREF (p, o) (\*[**OF\_GET\_REF**](lock__free_8c.md#define-of_get_ref) ([**p**](dynamic__load_8c.md#variable-p),o))
|
| define |
OF_GET_REF (p, o) ([**void**](broker__monitor_8c.md#function-timeout) \* [**volatile**](broker__monitor_8c.md#function-timeout) \*) ((([**char**](broker__monitor_8c.md#function-timeout) \*)([**p**](dynamic__load_8c.md#variable-p))) + (o))
|
Public Attributes Documentation
variable catalog_Ts
LF_TRAN_SYSTEM catalog_Ts;
variable dwb_slots_Ts
LF_TRAN_SYSTEM dwb_slots_Ts;
variable fpcache_Ts
LF_TRAN_SYSTEM fpcache_Ts;
variable free_sort_list_Ts
LF_TRAN_SYSTEM free_sort_list_Ts;
variable global_unique_stats_Ts
LF_TRAN_SYSTEM global_unique_stats_Ts;
variable hfid_table_Ts
LF_TRAN_SYSTEM hfid_table_Ts;
variable obj_lock_ent_Ts
LF_TRAN_SYSTEM obj_lock_ent_Ts;
variable obj_lock_res_Ts
LF_TRAN_SYSTEM obj_lock_res_Ts;
variable sessions_Ts
LF_TRAN_SYSTEM sessions_Ts;
variable spage_saving_Ts
LF_TRAN_SYSTEM spage_saving_Ts;
variable xcache_Ts
LF_TRAN_SYSTEM xcache_Ts;
Public Static Attributes Documentation
variable lf_claims
variable lf_claims_temp
variable lf_clears
variable lf_deletes
variable lf_deletes_restart
INT64 lf_deletes_restart;
variable lf_hash_size
variable lf_inserts
variable lf_inserts_restart
INT64 lf_inserts_restart;
variable lf_list_deletes
variable lf_list_deletes_fail_mark_next
INT64 lf_list_deletes_fail_mark_next;
variable lf_list_deletes_fail_unlink
INT64 lf_list_deletes_fail_unlink;
variable lf_list_deletes_found
INT64 lf_list_deletes_found;
variable lf_list_deletes_not_found
INT64 lf_list_deletes_not_found;
variable lf_list_deletes_not_match
INT64 lf_list_deletes_not_match;
variable lf_list_deletes_success_unlink
INT64 lf_list_deletes_success_unlink;
variable lf_list_inserts
variable lf_list_inserts_claim
INT64 lf_list_inserts_claim;
variable lf_list_inserts_fail_link
INT64 lf_list_inserts_fail_link;
variable lf_list_inserts_found
INT64 lf_list_inserts_found;
variable lf_list_inserts_save_temp_1
INT64 lf_list_inserts_save_temp_1;
variable lf_list_inserts_save_temp_2
INT64 lf_list_inserts_save_temp_2;
variable lf_list_inserts_success_link
INT64 lf_list_inserts_success_link;
variable lf_retires
variable lf_temps
variable lf_transports
variable tran_systems_initialized
bool tran_systems_initialized;
Public Functions Documentation
function lf_callback_vpid_compare
int lf_callback_vpid_compare (
void * vpid_1,
void * vpid_2
)
function lf_callback_vpid_copy
int lf_callback_vpid_copy (
void * src,
void * dest
)
function lf_callback_vpid_hash
unsigned int lf_callback_vpid_hash (
void * vpid,
int htsize
)
function lf_destroy_transaction_systems
void lf_destroy_transaction_systems (
void
)
function lf_freelist_claim
void * lf_freelist_claim (
LF_TRAN_ENTRY * tran_entry,
LF_FREELIST * freelist
)
function lf_freelist_destroy
void lf_freelist_destroy (
LF_FREELIST * freelist
)
function lf_freelist_init
int lf_freelist_init (
LF_FREELIST * freelist,
int initial_blocks,
int block_size,
LF_ENTRY_DESCRIPTOR * edesc,
LF_TRAN_SYSTEM * tran_system
)
function lf_freelist_retire
int lf_freelist_retire (
LF_TRAN_ENTRY * tran_entry,
LF_FREELIST * freelist,
void * entry
)
function lf_freelist_transport
int lf_freelist_transport (
LF_TRAN_ENTRY * tran_entry,
LF_FREELIST * freelist
)
function lf_hash_clear
void lf_hash_clear (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table
)
function lf_hash_create_iterator
void lf_hash_create_iterator (
LF_HASH_TABLE_ITERATOR * iterator,
LF_TRAN_ENTRY * tran_entry,
LF_HASH_TABLE * table
)
function lf_hash_delete
int lf_hash_delete (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
int * success
)
function lf_hash_delete_already_locked
int lf_hash_delete_already_locked (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
void * locked_entry,
int * success
)
function lf_hash_destroy
void lf_hash_destroy (
LF_HASH_TABLE * table
)
function lf_hash_find
int lf_hash_find (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
void ** entry
)
function lf_hash_find_or_insert
int lf_hash_find_or_insert (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
void ** entry,
int * inserted
)
function lf_hash_init
int lf_hash_init (
LF_HASH_TABLE * table,
LF_FREELIST * freelist,
unsigned int hash_size,
LF_ENTRY_DESCRIPTOR * edesc
)
function lf_hash_insert
int lf_hash_insert (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
void ** entry,
int * inserted
)
function lf_hash_insert_given
int lf_hash_insert_given (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
void ** entry,
int * inserted
)
function lf_hash_iterate
void * lf_hash_iterate (
LF_HASH_TABLE_ITERATOR * it
)
function lf_initialize_transaction_systems
int lf_initialize_transaction_systems (
int max_threads
)
function lf_io_list_find
int lf_io_list_find (
void ** list_p,
void * key,
LF_ENTRY_DESCRIPTOR * edesc,
void ** entry
)
function lf_io_list_find_or_insert
int lf_io_list_find_or_insert (
void ** list_p,
void * new_entry,
LF_ENTRY_DESCRIPTOR * edesc,
void ** entry
)
function lf_list_delete
int lf_list_delete (
LF_TRAN_ENTRY * tran,
void ** list_p,
void * key,
void * locked_entry,
int * behavior_flags,
LF_ENTRY_DESCRIPTOR * edesc,
LF_FREELIST * freelist,
int * success
)
function lf_list_find
int lf_list_find (
LF_TRAN_ENTRY * tran,
void ** list_p,
void * key,
int * behavior_flags,
LF_ENTRY_DESCRIPTOR * edesc,
void ** entry
)
function lf_stack_pop
void * lf_stack_pop (
void ** top,
LF_ENTRY_DESCRIPTOR * edesc
)
function lf_stack_push
int lf_stack_push (
void ** top,
void * entry,
LF_ENTRY_DESCRIPTOR * edesc
)
function lf_tran_compute_minimum_transaction_id
void lf_tran_compute_minimum_transaction_id (
LF_TRAN_SYSTEM * sys
)
function lf_tran_destroy_entry
void lf_tran_destroy_entry (
LF_TRAN_ENTRY * entry
)
function lf_tran_end
void lf_tran_end (
LF_TRAN_ENTRY * entry
)
function lf_tran_request_entry
LF_TRAN_ENTRY * lf_tran_request_entry (
LF_TRAN_SYSTEM * sys
)
function lf_tran_return_entry
void lf_tran_return_entry (
LF_TRAN_ENTRY * entry
)
function lf_tran_start
void lf_tran_start (
LF_TRAN_ENTRY * entry,
bool incr
)
function lf_tran_system_destroy
void lf_tran_system_destroy (
LF_TRAN_SYSTEM * sys
)
function lf_tran_system_init
int lf_tran_system_init (
LF_TRAN_SYSTEM * sys,
int max_threads
)
Public Static Functions Documentation
function lf_freelist_alloc_block
static int lf_freelist_alloc_block (
LF_FREELIST * freelist
)
function lf_hash_delete_internal
static int lf_hash_delete_internal (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
void * locked_entry,
int bflags,
int * success
)
function lf_hash_insert_internal
static int lf_hash_insert_internal (
LF_TRAN_ENTRY * tran,
LF_HASH_TABLE * table,
void * key,
int bflags,
void ** entry,
int * inserted
)
function lf_list_insert_internal
static int lf_list_insert_internal (
LF_TRAN_ENTRY * tran,
void ** list_p,
void * key,
int * behavior_flags,
LF_ENTRY_DESCRIPTOR * edesc,
LF_FREELIST * freelist,
void ** entry,
int * inserted
)
Macro Definition Documentation
define ADDR_HAS_MARK
#define ADDR_HAS_MARK (
p
) `((( long long volatile ) ( p )) & 0x1)`
define ADDR_STRIP_MARK
#define ADDR_STRIP_MARK (
p
) `(( void * volatile ) ((( long long volatile ) ( p )) & (~(( long long ) 0x1))))`
define ADDR_WITH_MARK
#define ADDR_WITH_MARK (
p
) `(( void * volatile ) ((( long long volatile ) ( p )) | 0x1))`
define LF_ASSERT_USE_MUTEX_OR_TRAN_STARTED
#define LF_ASSERT_USE_MUTEX_OR_TRAN_STARTED (
) `assert (is_tran_started == ! edesc ->using_mutex); /* The transaction is started if and only if we don ' t use mutex */ \ assert (! edesc ->using_mutex || entry_mutex ) /* If we use mutex, we have a mutex locked. */`
define LF_END_TRAN
#define LF_END_TRAN (
) `if (is_tran_started) lf_tran_end_with_mb (tran)`
define LF_END_TRAN_FORCE
#define LF_END_TRAN_FORCE (
) `assert (is_tran_started); lf_tran_end_with_mb (tran); is_tran_started = false`
define LF_END_TRAN_FORCE
#define LF_END_TRAN_FORCE (
) `assert (is_tran_started); lf_tran_end_with_mb (tran); is_tran_started = false`
define LF_LOCK_ENTRY
#define LF_LOCK_ENTRY (
tolock
) `/* multi line expression */`
define LF_LOCK_ENTRY
#define LF_LOCK_ENTRY (
tolock
) `/* multi line expression */`
#define LF_PROMOTE_TRAN_FORCE (
) `assert (is_tran_started); MEMORY_BARRIER (); lf_tran_start_with_mb (tran, true )`
define LF_START_TRAN
#define LF_START_TRAN (
) `if (!is_tran_started) lf_tran_start_with_mb (tran, false ); is_tran_started = true`
define LF_START_TRAN_FORCE
#define LF_START_TRAN_FORCE (
) `assert (!is_tran_started); lf_tran_start_with_mb (tran, false ); is_tran_started = true`
define LF_START_TRAN_FORCE
#define LF_START_TRAN_FORCE (
) `assert (!is_tran_started); lf_tran_start_with_mb (tran, false ); is_tran_started = true`
define LF_UNITTEST_INC
#define LF_UNITTEST_INC (
lf_stat,
incval
)
define LF_UNLOCK_ENTRY
#define LF_UNLOCK_ENTRY (
) `/* multi line expression */`
define LF_UNLOCK_ENTRY_FORCE
#define LF_UNLOCK_ENTRY_FORCE (
) `assert ( edesc ->using_mutex && entry_mutex != NULL ); \ pthread_mutex_unlock ( entry_mutex ); \ entry_mutex = NULL`
define LF_UNLOCK_ENTRY_FORCE
#define LF_UNLOCK_ENTRY_FORCE (
) `assert ( edesc ->using_mutex && entry_mutex != NULL ); \ pthread_mutex_unlock ( entry_mutex ); \ entry_mutex = NULL`
define OF_GET_PTR
#define OF_GET_PTR (
p,
o
) `( void *) ((( char *)( p )) + (o))`
define OF_GET_PTR_DEREF
#define OF_GET_PTR_DEREF (
p,
o
) `(* OF_GET_REF ( p ,o))`
define OF_GET_REF
#define OF_GET_REF (
p,
o
) `( void * volatile *) ((( char *)( p )) + (o))`
The documentation for this class was generated from the following file cubrid/src/base/lock_free.c