17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
#include <drizzled/global.h>
21
22
#include <string.h>
23
#include <drizzled/my_hash.h>
24
23
#include <drizzled/xid.h>
25
#include "drizzled/internal/my_pthread.h"
26
#include "drizzled/charset.h"
27
#include "drizzled/global_charset_info.h"
28
#include "drizzled/charset_info.h"
33
28
bool XID::eq(XID *xid)
112
107
return sizeof(gtrid_length)+sizeof(bqual_length)+gtrid_length+bqual_length;
115
/***************************************************************************
116
Handling of XA id cacheing
117
***************************************************************************/
118
pthread_mutex_t LOCK_xid_cache;
121
unsigned char *xid_get_hash_key(const unsigned char *, size_t *, bool);
122
void xid_free_hash(void *);
124
unsigned char *xid_get_hash_key(const unsigned char *ptr, size_t *length,
127
*length=((XID_STATE*)ptr)->xid.key_length();
128
return ((XID_STATE*)ptr)->xid.key();
131
void xid_free_hash(void *ptr)
133
XID_STATE *state= (XID_STATE *)ptr;
134
if (state->in_session == false)
138
bool xid_cache_init()
140
pthread_mutex_init(&LOCK_xid_cache, MY_MUTEX_INIT_FAST);
141
return hash_init(&xid_cache, &my_charset_bin, 100, 0, 0,
142
xid_get_hash_key, xid_free_hash, 0) != 0;
145
void xid_cache_free()
147
if (hash_inited(&xid_cache))
149
hash_free(&xid_cache);
150
pthread_mutex_destroy(&LOCK_xid_cache);
154
XID_STATE *xid_cache_search(XID *xid)
156
pthread_mutex_lock(&LOCK_xid_cache);
157
XID_STATE *res=(XID_STATE *)hash_search(&xid_cache, xid->key(), xid->key_length());
158
pthread_mutex_unlock(&LOCK_xid_cache);
162
bool xid_cache_insert(XID *xid, enum xa_states xa_state)
166
pthread_mutex_lock(&LOCK_xid_cache);
167
if (hash_search(&xid_cache, xid->key(), xid->key_length()))
169
else if ((xs = new XID_STATE) == NULL)
173
xs->xa_state=xa_state;
176
res= my_hash_insert(&xid_cache, (unsigned char*)xs);
178
pthread_mutex_unlock(&LOCK_xid_cache);
182
bool xid_cache_insert(XID_STATE *xid_state)
184
pthread_mutex_lock(&LOCK_xid_cache);
185
bool res=my_hash_insert(&xid_cache, (unsigned char*)xid_state);
186
pthread_mutex_unlock(&LOCK_xid_cache);
190
void xid_cache_delete(XID_STATE *xid_state)
192
pthread_mutex_lock(&LOCK_xid_cache);
193
hash_delete(&xid_cache, (unsigned char *)xid_state);
194
pthread_mutex_unlock(&LOCK_xid_cache);
197
} /* namespace drizzled */