bug #25895 (compiling the embedded server fails on some 64-bit platforms)

it can't be compile everywhere if we just cast pointer to pthread_t
So now we use correct pthread_self() value as the pthread_t and
pointer where we need to identify the thread exactly.
parent 6679490d
...@@ -593,7 +593,7 @@ void *create_embedded_thd(int client_flag) ...@@ -593,7 +593,7 @@ void *create_embedded_thd(int client_flag)
thd->set_time(); thd->set_time();
thd->init_for_queries(); thd->init_for_queries();
thd->client_capabilities= client_flag; thd->client_capabilities= client_flag;
thd->real_id= (pthread_t) thd; thd->real_id= pthread_self();
thd->db= NULL; thd->db= NULL;
thd->db_length= 0; thd->db_length= 0;
......
...@@ -3085,7 +3085,13 @@ class User_level_lock ...@@ -3085,7 +3085,13 @@ class User_level_lock
int count; int count;
bool locked; bool locked;
pthread_cond_t cond; pthread_cond_t cond;
#ifndef EMBEDDED_LIBRARY
pthread_t thread; pthread_t thread;
void set_thread(THD *thd) { thread= thd->real_id; }
#else
THD *thread;
void set_thread(THD *thd) { thread= thd; }
#endif /*EMBEDDED_LIBRARY*/
ulong thread_id; ulong thread_id;
User_level_lock(const char *key_arg,uint length, ulong id) User_level_lock(const char *key_arg,uint length, ulong id)
...@@ -3239,7 +3245,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout) ...@@ -3239,7 +3245,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout)
else else
{ {
ull->locked=1; ull->locked=1;
ull->thread=thd->real_id; ull->set_thread(thd);
thd->ull=ull; thd->ull=ull;
} }
pthread_mutex_unlock(&LOCK_user_locks); pthread_mutex_unlock(&LOCK_user_locks);
...@@ -3314,7 +3320,7 @@ longlong Item_func_get_lock::val_int() ...@@ -3314,7 +3320,7 @@ longlong Item_func_get_lock::val_int()
null_value=1; // Probably out of memory null_value=1; // Probably out of memory
return 0; return 0;
} }
ull->thread=thd->real_id; ull->set_thread(thd);
thd->ull=ull; thd->ull=ull;
pthread_mutex_unlock(&LOCK_user_locks); pthread_mutex_unlock(&LOCK_user_locks);
return 1; // Got new lock return 1; // Got new lock
...@@ -3355,7 +3361,7 @@ longlong Item_func_get_lock::val_int() ...@@ -3355,7 +3361,7 @@ longlong Item_func_get_lock::val_int()
else // We got the lock else // We got the lock
{ {
ull->locked=1; ull->locked=1;
ull->thread=thd->real_id; ull->set_thread(thd);
ull->thread_id= thd->thread_id; ull->thread_id= thd->thread_id;
thd->ull=ull; thd->ull=ull;
error=0; error=0;
...@@ -3404,7 +3410,7 @@ longlong Item_func_release_lock::val_int() ...@@ -3404,7 +3410,7 @@ longlong Item_func_release_lock::val_int()
else else
{ {
#ifdef EMBEDDED_LIBRARY #ifdef EMBEDDED_LIBRARY
if (ull->locked && pthread_equal(current_thd->real_id,ull->thread)) if (ull->locked && (current_thd == ull->thread))
#else #else
if (ull->locked && pthread_equal(pthread_self(),ull->thread)) if (ull->locked && pthread_equal(pthread_self(),ull->thread))
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment