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

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 2000
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: util_sig.c,v 1.3 2000/04/28 19:32:00 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #include <signal.h>
  14. #endif
  15. #include "db_int.h"
  16. #include "common_ext.h"
  17. static int interrupt;
  18. static void onint __P((int));
  19. /*
  20.  * onint --
  21.  * Interrupt signal handler.
  22.  */
  23. static void
  24. onint(signo)
  25. int signo;
  26. {
  27. if ((interrupt = signo) == 0)
  28. interrupt = SIGINT;
  29. }
  30. /*
  31.  * __db_util_siginit --
  32.  *
  33.  * PUBLIC: void __db_util_siginit __P((void));
  34.  */
  35. void
  36. __db_util_siginit()
  37. {
  38. /*
  39.  * Initialize the set of signals for which we want to clean up.
  40.  * Generally, we try not to leave the shared regions locked if
  41.  * we can.
  42.  */
  43. #ifdef SIGHUP
  44. (void)signal(SIGHUP, onint);
  45. #endif
  46. (void)signal(SIGINT, onint);
  47. #ifdef SIGPIPE
  48. (void)signal(SIGPIPE, onint);
  49. #endif
  50. (void)signal(SIGTERM, onint);
  51. }
  52. /*
  53.  * __db_util_interrupted --
  54.  * Return if interrupted.
  55.  *
  56.  * PUBLIC: int __db_util_interrupted __P((void));
  57.  */
  58. int
  59. __db_util_interrupted()
  60. {
  61. return (interrupt != 0);
  62. }
  63. /*
  64.  * __db_util_sigresend --
  65.  *
  66.  * PUBLIC: void __db_util_sigresend __P((void));
  67.  */
  68. void
  69. __db_util_sigresend()
  70. {
  71. /* Resend any caught signal. */
  72. if (__db_util_interrupted != 0) {
  73. (void)signal(interrupt, SIG_DFL);
  74. (void)raise(interrupt);
  75. /* NOTREACHED */
  76. }
  77. }