diff options
author | unknown <hf@deer.(none)> | 2003-12-05 21:45:19 +0400 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2003-12-05 21:45:19 +0400 |
commit | 007d2e5a6bce0911dc1ee3184b62ea53a777cac0 (patch) | |
tree | cb94baa8d182e7b91da6d7a0aecc720b9a897bfb | |
parent | d4e3cc72195f6bbb450b3d1bad8fe9f735d6872a (diff) | |
download | mariadb-git-007d2e5a6bce0911dc1ee3184b62ea53a777cac0.tar.gz |
Fix for #1890 and #1959
This bug happens under Windows & Embedded server
Reason is that pthread_self() always returns NULL in this case.
This confuses thr_lock function and it doesn't stop
thread inserting in the write-locked table.
Global problem is that there's no way under Windows to get
unique thread handle for working thread.
Monty made a workaround for server - we store the thread's handle
we get when we create thread in the thread-specific variable.
This doesn't work with the embedded library for we don't control
thread creation there.
I added code that sets CurrentThreadId as the pthread_self
for the embedded library.
It seems to solve problem because it's unique and we don't use
pthread_self as a parameter for thread functions in embedded library.
mysys/my_thr_init.c:
setting of tmp->thread_self added
-rw-r--r-- | mysys/my_thr_init.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c index 9f64e9dcb60..3196256facc 100644 --- a/mysys/my_thr_init.c +++ b/mysys/my_thr_init.c @@ -157,6 +157,9 @@ my_bool my_thread_init(void) tmp= &THR_KEY_mysys; #endif tmp->id= ++thread_id; +#if defined(__WIN__) && defined(EMBEDDED_LIBRARY) + tmp->thread_self= (pthread_t)getpid(); +#endif pthread_mutex_init(&tmp->mutex,MY_MUTEX_INIT_FAST); pthread_cond_init(&tmp->suspend, NULL); tmp->init= 1; |