00001
00010 #include <sys/time.h>
00011 #include <errno.h>
00012 #include <pthread.h>
00013 #include <stdio.h>
00014 #include <stdlib.h>
00015 #include <setjmp.h>
00016 #include <assert.h>
00017 #include <sched.h>
00018 #include <misc/debug.h>
00019 #include <misc/generic_types.h>
00020 #include <core/stats.h>
00021 #include <core/sentinel.h>
00022 #include <core/koa.h>
00023 #include <core/fm.h>
00024 #include <core/buffer.h>
00025 #include <core/config.h>
00026 #include <core/tx.h>
00027
00028
00029 extern txc_sentinelmgr_t *txc_g_sentinelmgr;
00030 extern txc_buffermgr_t *txc_g_buffermgr;
00031 extern txc_koamgr_t *txc_g_koamgr;
00032 extern txc_txmgr_t *txc_g_txmgr;
00033 extern txc_statsmgr_t *txc_g_statsmgr;
00034
00035
00036 struct timeval txc_initialization_time;
00037
00045 int
00046 _TXC_global_init()
00047 {
00048 txc_config_init();
00049 txc_sentinelmgr_create(&txc_g_sentinelmgr);
00050 txc_buffermgr_create(&txc_g_buffermgr);
00051 #ifdef _TXC_STATS_BUILD
00052 txc_statsmgr_create(&txc_g_statsmgr);
00053 #endif
00054 txc_txmgr_create(&txc_g_txmgr, txc_g_buffermgr, txc_g_sentinelmgr,
00055 txc_g_statsmgr);
00056 txc_koamgr_create(&txc_g_koamgr, txc_g_sentinelmgr, txc_g_buffermgr);
00057
00058 if (txc_runtime_settings.debug_all == TXC_BOOL_TRUE) {
00059 txc_runtime_settings.debug_koa = TXC_BOOL_TRUE;
00060 txc_runtime_settings.debug_pool = TXC_BOOL_TRUE;
00061 txc_runtime_settings.debug_sentinel = TXC_BOOL_TRUE;
00062 txc_runtime_settings.debug_tx = TXC_BOOL_TRUE;
00063 txc_runtime_settings.debug_xcall = TXC_BOOL_TRUE;
00064 }
00065
00066 return (int) TXC_R_SUCCESS;
00067 }
00068
00069
00077 int
00078 _TXC_global_shutdown()
00079 {
00080 txc_stats_print(txc_g_statsmgr);
00081
00082 return (int) TXC_R_SUCCESS;
00083 }
00084
00085
00091 int
00092 _TXC_thread_init()
00093 {
00094 txc_tx_create(txc_g_txmgr, &txc_l_txd);
00095 return (int) TXC_R_SUCCESS;
00096 }
00097
00098
00107 void
00108 _TXC_transaction_abort(txc_tx_abortreason_t abort_reason)
00109 {
00110 txc_tx_abort_transaction(txc_l_txd, abort_reason);
00111 }
00112
00113
00123 txc_tx_xactstate_t
00124 _TXC_get_xactstate()
00125 {
00126 txc_tx_t *txd = txc_l_txd;
00127
00128 return txc_tx_get_xactstate(txd);
00129 }
00130
00131
00141 void
00142 _TXC_transaction_pre_begin(const char *srcloc_str, const char *src_file, const char *src_fun, int src_line)
00143 {
00144 txc_tx_t *txd = txc_l_txd;
00145 txc_tx_srcloc_t srcloc = {src_file, src_fun, src_line};
00146
00147 txc_tx_pre_begin(txd, srcloc_str, &srcloc);
00148 }
00149
00150
00154 void
00155 _TXC_transaction_post_begin()
00156 {
00157 txc_tx_t *txd = txc_l_txd;
00158
00159 txc_tx_post_begin(txd);
00160 }
00161
00162
00166 void
00167 _TXC_fm_register(int flags, int *err)
00168 {
00169 txc_tx_t *txd = txc_l_txd;
00170
00171 txc_fm_register(txd, flags, err);
00172 }