engine-romp-bsd.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== machdep.c ============================================================
  2.  * Copyright (c) 1993 Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * Description : Machine dependent functions for NetBSD on i386
  5.  *
  6.  * 1.00 93/08/04 proven
  7.  *      -Started coding this file.
  8.  */
  9. #ifndef lint
  10. static const char rcsid[] = "$Id$";
  11. #endif
  12. #include <pthread.h>
  13. /* ==========================================================================
  14.  * machdep_save_state()
  15.  */
  16. int machdep_save_state(void)
  17. {
  18.     return(_pthread_save(pthread_run->machdep_data.machdep_state, 0, 0));
  19. }
  20. /* ==========================================================================
  21.  * machdep_restore_state()
  22.  */
  23. void machdep_restore_state(void)
  24. {
  25.     _pthread_restore(pthread_run->machdep_data.machdep_state);
  26. }
  27. /* ==========================================================================
  28.  * machdep_set_thread_timer()
  29.  */
  30. void machdep_set_thread_timer(struct machdep_pthread *machdep_pthread)
  31. {
  32.     if (setitimer(ITIMER_VIRTUAL, &(machdep_pthread->machdep_timer), NULL)) {
  33.         PANIC();
  34.     }
  35. }
  36. /* ==========================================================================
  37.  * machdep_unset_thread_timer()
  38.  */
  39. void machdep_unset_thread_timer(struct machdep_pthread *machdep_pthread)
  40. {
  41.     struct itimerval zeroval = { { 0, 0 }, { 0, 0} };
  42.     if (setitimer(ITIMER_VIRTUAL, &zeroval, NULL)) {
  43.         PANIC();
  44.     }
  45. }
  46. /* ==========================================================================
  47.  * machdep_pthread_cleanup()
  48.  */
  49. void *machdep_pthread_cleanup(struct machdep_pthread *machdep_pthread)
  50. {
  51.     return(machdep_pthread->machdep_stack);
  52. }
  53. /* ==========================================================================
  54.  * machdep_pthread_start()
  55.  */
  56. void machdep_pthread_start(void)
  57. {
  58. context_switch_done();
  59. sig_check_and_resume();
  60.     /* Run current threads start routine with argument */
  61.     pthread_exit(pthread_run->machdep_data.start_routine
  62.       (pthread_run->machdep_data.start_argument));
  63.     /* should never reach here */
  64.     PANIC();
  65. }
  66. /* ==========================================================================
  67.  * machdep_pthread_create()
  68.  */
  69. void machdep_pthread_create(struct machdep_pthread *machdep_pthread,
  70.   void *(* start_routine)(), void *start_argument, long stack_size,
  71.   void *stack_start, long nsec)
  72. {
  73.     machdep_pthread->machdep_stack = stack_start;
  74.     machdep_pthread->start_routine = start_routine;
  75.     machdep_pthread->start_argument = start_argument;
  76.     machdep_pthread->machdep_timer.it_value.tv_sec = 0;
  77.     machdep_pthread->machdep_timer.it_interval.tv_sec = 0;
  78.     machdep_pthread->machdep_timer.it_interval.tv_usec = 0;
  79.     machdep_pthread->machdep_timer.it_value.tv_usec = nsec / 1000;
  80.     _pthread_save(machdep_pthread->machdep_state,
  81.   (void *)((int)machdep_pthread->machdep_stack + stack_size),
  82.   machdep_pthread_start);
  83. }