29 #include "lixa_trace.h"
30 #include "client_status.h"
37 #ifdef LIXA_TRACE_MODULE
38 # undef LIXA_TRACE_MODULE
40 #define LIXA_TRACE_MODULE LIXA_TRACE_MOD_XTA
46 enum Exception { G_TRY_MALLOC_ERROR
52 LIXA_TRACE((
"xta_transaction_manager_new\n"));
57 THROW(G_TRY_MALLOC_ERROR);
59 g_mutex_init(&this->mutex);
61 if (
LIXA_RC_OK != (ret_cod = client_config(&global_ccc, TRUE)))
62 THROW(CLIENT_CONFIG_ERROR);
66 case G_TRY_MALLOC_ERROR:
69 case CLIENT_CONFIG_ERROR:
78 LIXA_TRACE((
"xta_transaction_manager_new/excp=%d/"
79 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
87 enum Exception { CLIENT_UNCONFIG_ERROR
91 LIXA_TRACE((
"xta_transaction_manager_delete\n"));
94 if (
LIXA_RC_OK != (ret_cod = client_unconfig(&global_ccc, TRUE)))
95 THROW(CLIENT_UNCONFIG_ERROR);
103 g_mutex_clear(&tm->
mutex);
111 case CLIENT_UNCONFIG_ERROR:
120 LIXA_TRACE((
"xta_transaction_manager_delete/excp=%d/"
121 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
139 # pragma GCC diagnostic ignored "-Wdeprecated-declarations"
144 enum Exception { NULL_OBJECT1
145 , G_HASH_TABLE_NEW_ERROR
153 LIXA_TRACE((
"xta_transaction_manager_create_transaction\n"));
155 GThread *
self = g_thread_self();
161 LIXA_TRACE((
"xta_transaction_manager_create_transaction: "
162 "locking mutex...\n"));
163 g_mutex_lock(&tm->
mutex);
170 THROW(G_HASH_TABLE_NEW_ERROR);
180 if (NULL != (tx = g_hash_table_lookup(tm->
transactions,
self))) {
183 LIXA_TRACE((
"xta_transaction_manager_create_transaction: "
184 "there is a started transactions for this thread, "
185 "deleting the old one...\n"));
187 THROW(NON_DISPOSABLE_TX);
202 #if GLIB_MAJOR_VERSION == 2
203 # if GLIB_MINOR_VERSION >= 40
205 THROW(INTERNAL_ERROR);
219 case G_HASH_TABLE_NEW_ERROR:
222 case NON_DISPOSABLE_TX:
238 if (NULL_OBJECT2 < excp && NONE > excp)
241 if (NULL_OBJECT1 < excp) {
242 g_mutex_unlock(&tm->
mutex);
243 LIXA_TRACE((
"xta_transaction_manager_create_transaction: "
244 "mutex unlocked\n"));
247 LIXA_TRACE((
"xta_transaction_manager_create_transaction/excp=%d/"
248 "ret_cod=%d/errno=%d\n", excp, ret_cod, errno));
252 # pragma GCC diagnostic warning "-Wdeprecated-declarations"
#define LIXA_RC_NULL_OBJECT
#define LIXA_RC_INTERNAL_ERROR
xta_transaction_manager_config_t * xta_transaction_manager_get_config(void)
void xta_transaction_manager_config_t
xta_transaction_manager_t * xta_transaction_manager_new(void)
int xta_transaction_safe_delete(const xta_transaction_t *transact)
xta_transaction_t * xta_transaction_manager_create_transaction(xta_transaction_manager_t *tm)
int xta_transaction_get_multiple_branches(const xta_transaction_t *transact)
#define LIXA_RC_G_TRY_MALLOC_ERROR
GHashTable * transactions
void xta_transaction_manager_delete(xta_transaction_manager_t *tm)
#define LIXA_RC_G_HASH_TABLE_NEW_ERROR
#define LIXA_RC_NON_DISPOSABLE_TX
void xta_transaction_delete(xta_transaction_t *transact)
xta_transaction_t * xta_transaction_new(void)