util_sig.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:1k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 2000-2002
  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.7 2002/02/02 17:04:42 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. static int interrupt;
  17. static void onint __P((int));
  18. /*
  19.  * onint --
  20.  * Interrupt signal handler.
  21.  */
  22. static void
  23. onint(signo)
  24. int signo;
  25. {
  26. if ((interrupt = signo) == 0)
  27. interrupt = SIGINT;
  28. }
  29. /*
  30.  * __db_util_siginit --
  31.  *
  32.  * PUBLIC: void __db_util_siginit __P((void));
  33.  */
  34. void
  35. __db_util_siginit()
  36. {
  37. /*
  38.  * Initialize the set of signals for which we want to clean up.
  39.  * Generally, we try not to leave the shared regions locked if
  40.  * we can.
  41.  */
  42. #ifdef SIGHUP
  43. (void)signal(SIGHUP, onint);
  44. #endif
  45. (void)signal(SIGINT, onint);
  46. #ifdef SIGPIPE
  47. (void)signal(SIGPIPE, onint);
  48. #endif
  49. (void)signal(SIGTERM, onint);
  50. }
  51. /*
  52.  * __db_util_interrupted --
  53.  * Return if interrupted.
  54.  *
  55.  * PUBLIC: int __db_util_interrupted __P((void));
  56.  */
  57. int
  58. __db_util_interrupted()
  59. {
  60. return (interrupt != 0);
  61. }
  62. /*
  63.  * __db_util_sigresend --
  64.  *
  65.  * PUBLIC: void __db_util_sigresend __P((void));
  66.  */
  67. void
  68. __db_util_sigresend()
  69. {
  70. /* Resend any caught signal. */
  71. if (interrupt != 0) {
  72. (void)signal(interrupt, SIG_DFL);
  73. (void)raise(interrupt);
  74. /* NOTREACHED */
  75. }
  76. }