Copyright (C) 2000-2012 |
GNU Info (mysql.info)RTS-threadsComments about RTS threads ========================== I have tried to use the RTS thread packages with MySQL but stumbled on the following problems: They use an old version of a lot of POSIX calls and it is very tedious to make wrappers for all functions. I am inclined to think that it would be easier to change the thread libraries to the newest POSIX specification. Some wrappers are already written. See `mysys/my_pthread.c' for more info. At least the following should be changed: `pthread_get_specific' should use one argument. `sigwait' should take two arguments. A lot of functions (at least `pthread_cond_wait', `pthread_cond_timedwait') should return the error code on error. Now they return -1 and set `errno'. Another problem is that user-level threads use the `ALRM' signal and this aborts a lot of functions (`read', `write', `open'...). MySQL should do a retry on interrupt on all of these but it is not that easy to verify it. The biggest unsolved problem is the following: To get thread-level alarms I changed `mysys/thr_alarm.c' to wait between alarms with `pthread_cond_timedwait()', but this aborts with error `EINTR'. I tried to debug the thread library as to why this happens, but couldn't find any easy solution. If someone wants to try MySQL with RTS threads I suggest the following: * Change functions MySQL uses from the thread library to POSIX. This shouldn't take that long. * Compile all libraries with the `-DHAVE_rts_threads'. * Compile `thr_alarm'. * If there are some small differences in the implementation, they may be fixed by changing `my_pthread.h' and `my_pthread.c'. * Run `thr_alarm'. If it runs without any "warning", "error" or aborted messages, you are on the right track. Here is a successful run on Solaris: Main thread: 1 Thread 0 (5) started Thread: 5 Waiting process_alarm Thread 1 (6) started Thread: 6 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 1 (1) sec Thread: 6 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 2 (2) sec Thread: 6 Simulation of no alarm needed Thread: 6 Slept for 0 (3) sec Thread: 6 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 4 (4) sec Thread: 6 Waiting process_alarm thread_alarm Thread: 5 Slept for 10 (10) sec Thread: 5 Waiting process_alarm process_alarm thread_alarm Thread: 6 Slept for 5 (5) sec Thread: 6 Waiting process_alarm process_alarm ... thread_alarm Thread: 5 Slept for 0 (1) sec end automatically generated by info2www version 1.2.2.9 |