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

MySQL数据库

开发平台:

Visual C++

  1. /* hello */
  2. #include <stdio.h>
  3. #include <pthread.h>
  4. #include <signal.h>
  5. static const char *const state_names[] = {
  6. #define __pthread_defstate(S,NAME) NAME,
  7. #include "pthread/state.def"
  8. #undef __pthread_defstate
  9. 0
  10. };
  11. void (*dump_thread_info_fn) (struct pthread *, FILE *);
  12. static void
  13. dump_thread_info (thread, file)
  14.      struct pthread *thread;
  15.      FILE *file;
  16. {
  17. /* machdep */
  18. /* attr */
  19. /* signals */
  20. /* wakeup_time */
  21. /* join */
  22. fprintf (file, "    thread @%p prio %3d %s", thread,
  23.  thread->pthread_priority, state_names[(int) thread->state]);
  24. switch (thread->state) {
  25.   case PS_FDLR_WAIT:
  26. fprintf (file, " fd %d[%d]", thread->data.fd.fd,
  27.  thread->data.fd.branch);
  28. fprintf (file, " owner %pr/%pw",
  29.  fd_table[thread->data.fd.fd]->r_owner,
  30.  fd_table[thread->data.fd.fd]->w_owner);
  31. break;
  32. }
  33. /* show where the signal handler gets run */
  34. if (thread == pthread_run)
  35. fprintf (file, "tt[ME!]");
  36. fprintf (file, "n");
  37. if (dump_thread_info_fn)
  38. (*dump_thread_info_fn) (thread, file);
  39. }
  40. static void
  41. pthread_dump_info_to_file (file)
  42.      FILE *file;
  43. {
  44. pthread_t t;
  45. for (t = pthread_link_list; t; t = t->pll)
  46. dump_thread_info (t, file);
  47. }
  48. void
  49. pthread_dump_info ()
  50. {
  51. if (ftrylockfile (stderr) != 0)
  52. return;
  53. fprintf (stderr, "process id %ld:n", (long) getpid ());
  54. pthread_dump_info_to_file (stderr);
  55. funlockfile (stderr);
  56. }
  57. #ifdef SIGINFO
  58. static void
  59. sig_handler (sig)
  60.      int sig;
  61. {
  62. pthread_dump_info ();
  63. }
  64. void
  65. pthread_setup_siginfo ()
  66. {
  67. (void) signal (SIGINFO, sig_handler);
  68. }
  69. #endif