DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(mysql.info.gz) RTS-threads

Info Catalog (mysql.info.gz) The DBUG package (mysql.info.gz) Porting (mysql.info.gz) Thread packages
 
 E.4 Comments about RTS Threads
 ==============================
 
 I have tried to use the RTS thread packages with MySQL but stumbled on
 the following problems:
 
 They use old versions of many 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 currently 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
 
Info Catalog (mysql.info.gz) The DBUG package (mysql.info.gz) Porting (mysql.info.gz) Thread packages
automatically generated byinfo2html