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)
thd->set_time();
thd->init_for_queries();
thd->client_capabilities= client_flag;
thd->real_id= (pthread_t) thd;
thd->real_id= pthread_self();
thd->db= NULL;
thd->db_length= 0;
......
......@@ -3085,7 +3085,13 @@ class User_level_lock
int count;
bool locked;
pthread_cond_t cond;
#ifndef EMBEDDED_LIBRARY
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;
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)
else
{
ull->locked=1;
ull->thread=thd->real_id;
ull->set_thread(thd);
thd->ull=ull;
}
pthread_mutex_unlock(&LOCK_user_locks);
......@@ -3314,7 +3320,7 @@ longlong Item_func_get_lock::val_int()
null_value=1; // Probably out of memory
return 0;
}
ull->thread=thd->real_id;
ull->set_thread(thd);
thd->ull=ull;
pthread_mutex_unlock(&LOCK_user_locks);
return 1; // Got new lock
......@@ -3355,7 +3361,7 @@ longlong Item_func_get_lock::val_int()
else // We got the lock
{
ull->locked=1;
ull->thread=thd->real_id;
ull->set_thread(thd);
ull->thread_id= thd->thread_id;
thd->ull=ull;
error=0;
......@@ -3404,7 +3410,7 @@ longlong Item_func_release_lock::val_int()
else
{
#ifdef EMBEDDED_LIBRARY
if (ull->locked && pthread_equal(current_thd->real_id,ull->thread))
if (ull->locked && (current_thd == ull->thread))
#else
if (ull->locked && pthread_equal(pthread_self(),ull->thread))
#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