sig_aux.c 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #include <errno.h>
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <signal.h>
  6. #include "sig_aux.h"
  7. /* Disable delivery of SIG_INIT and SIG_ACK. */
  8. void
  9. signals_disable(void)
  10. {
  11. sigset_t sigset;
  12. sigaddset(&sigset, SIG_TIMER);
  13. /*sigemptyset(&sigset);
  14. sigaddset(&sigset, SIG_INIT);
  15. sigaddset(&sigset, SIG_ACK);
  16. sigaddset(&sigset, SIG_TERMINATE);
  17. sigaddset(&sigset, SIG_INIT_APP);
  18. sigaddset(&sigset, SIG_IDAG_FIND_IDAGS);
  19. sigaddset(&sigset, SIG_REQ_DDS);
  20. sigaddset(&sigset, SIG_REQ_CORES);
  21. sigaddset(&sigset, SIG_REP_OFFERS);
  22. sigaddset(&sigset, SIG_INIT_AGENT);
  23. sigaddset(&sigset, SIG_ADD_CORES_DDS);
  24. sigaddset(&sigset, SIG_REM_CORES_DDS);
  25. sigaddset(&sigset, SIG_INIT_FAR_REQ);
  26. sigaddset(&sigset, SIG_FAR_REQ);
  27. sigaddset(&sigset, SIG_APPOINT_WORK);
  28. sigaddset(&sigset, SIG_CHECK_REM_TIME);
  29. sigaddset(&sigset, SIG_FINISH);
  30. sigaddset(&sigset, SIG_REJECT);
  31. sigaddset(&sigset, SIG_REMOVE_FAR_MAN);*/
  32. if (sigprocmask(SIG_BLOCK, &sigset, NULL) < 0) {
  33. perror("signals_disable: sigprocmask");
  34. exit(1);
  35. }
  36. }
  37. /* Enable delivery of SIG_INIT and SIG_ACK. */
  38. void
  39. signals_enable(void)
  40. {
  41. sigset_t sigset;
  42. sigaddset(&sigset, SIG_TIMER);
  43. /*sigemptyset(&sigset);
  44. sigaddset(&sigset, SIG_INIT);
  45. sigaddset(&sigset, SIG_ACK);
  46. sigaddset(&sigset, SIG_TERMINATE);
  47. sigaddset(&sigset, SIG_INIT_APP);
  48. sigaddset(&sigset, SIG_IDAG_FIND_IDAGS);
  49. sigaddset(&sigset, SIG_REQ_DDS);
  50. sigaddset(&sigset, SIG_REQ_CORES);
  51. sigaddset(&sigset, SIG_REP_OFFERS);
  52. sigaddset(&sigset, SIG_INIT_AGENT);
  53. sigaddset(&sigset, SIG_ADD_CORES_DDS);
  54. sigaddset(&sigset, SIG_REM_CORES_DDS);
  55. sigaddset(&sigset, SIG_INIT_FAR_REQ);
  56. sigaddset(&sigset, SIG_FAR_REQ);
  57. sigaddset(&sigset, SIG_APPOINT_WORK);
  58. sigaddset(&sigset, SIG_CHECK_REM_TIME);
  59. sigaddset(&sigset, SIG_FINISH);
  60. sigaddset(&sigset, SIG_REJECT);
  61. sigaddset(&sigset, SIG_REMOVE_FAR_MAN);*/
  62. if (sigprocmask(SIG_UNBLOCK, &sigset, NULL) < 0) {
  63. perror("signals_enable: sigprocmask");
  64. exit(1);
  65. }
  66. }
  67. void
  68. sig_SEGV_enable(void)
  69. {
  70. sigset_t sigset;
  71. sigaddset(&sigset, SIGSEGV);
  72. if (sigprocmask(SIG_UNBLOCK, &sigset, NULL) < 0) {
  73. perror("signals_enable: sigprocmask");
  74. exit(1);
  75. }
  76. }
  77. /* Install two signal handlers.
  78. * One for SIGCHLD, one for SIGALRM.
  79. * Make sure both signals are masked when one of them is running.
  80. */
  81. void
  82. install_signal_handlers(void)
  83. {
  84. sigset_t sigset;
  85. struct sigaction sa;
  86. //sa.sa_handler = sigUSR1_handler;
  87. sa.sa_flags = SA_RESTART | SA_SIGINFO;
  88. sigemptyset(&sigset);
  89. /*sigaddset(&sigset, SIG_INIT);
  90. sigaddset(&sigset, SIG_ACK);
  91. sigaddset(&sigset, SIG_TERMINATE);
  92. sigaddset(&sigset, SIG_INIT_APP);
  93. sigaddset(&sigset, SIG_IDAG_FIND_IDAGS);
  94. sigaddset(&sigset, SIG_REQ_DDS);
  95. sigaddset(&sigset, SIG_REQ_CORES);
  96. sigaddset(&sigset, SIG_REP_OFFERS);
  97. sigaddset(&sigset, SIG_INIT_AGENT);
  98. sigaddset(&sigset, SIG_ADD_CORES_DDS);
  99. sigaddset(&sigset, SIG_REM_CORES_DDS);
  100. sigaddset(&sigset, SIG_INIT_FAR_REQ);
  101. sigaddset(&sigset, SIG_FAR_REQ);
  102. sigaddset(&sigset, SIG_APPOINT_WORK);
  103. sigaddset(&sigset, SIGSEGV);
  104. sigaddset(&sigset, SIG_CHECK_REM_TIME);
  105. sigaddset(&sigset, SIG_FINISH);
  106. sigaddset(&sigset, SIG_REJECT);
  107. sigaddset(&sigset, SIG_REMOVE_FAR_MAN);*/
  108. sa.sa_mask = sigset;
  109. sa.sa_sigaction = sig_TIMER_handler;
  110. if (sigaction(SIG_TIMER, &sa, NULL) < 0) {
  111. perror("sigaction: SIG_TIMER");
  112. exit(1);
  113. }
  114. /*
  115. sa.sa_sigaction = sig_INIT_handler;
  116. if (sigaction(SIG_INIT, &sa, NULL) < 0) {
  117. perror("sigaction: sig_INIT");
  118. exit(1);
  119. }
  120. sa.sa_sigaction = sig_ACK_handler;
  121. if (sigaction(SIG_ACK, &sa, NULL) < 0) {
  122. perror("sigaction: sig_ack");
  123. exit(1);
  124. }
  125. sa.sa_sigaction = sig_TERMINATE_handler;
  126. if (sigaction(SIG_TERMINATE, &sa, NULL) < 0) {
  127. perror("sigaction: sig_term");
  128. exit(1);
  129. }
  130. sa.sa_sigaction = sig_INIT_APP_handler;
  131. if (sigaction(SIG_INIT_APP, &sa, NULL) < 0) {
  132. perror("sigaction: sig_INIT_APP");
  133. exit(1);
  134. }
  135. sa.sa_sigaction = sig_IDAG_FIND_IDAGS_handler;
  136. if (sigaction(SIG_IDAG_FIND_IDAGS, &sa, NULL) < 0) {
  137. perror("sigaction: sig_INIT_APP");
  138. exit(1);
  139. }
  140. sa.sa_sigaction = sig_REQ_DDS_handler;
  141. if (sigaction(SIG_REQ_DDS, &sa, NULL) < 0) {
  142. perror("sigaction: sig_INIT_APP");
  143. exit(1);
  144. }
  145. sa.sa_sigaction = sig_REQ_CORES_handler;
  146. if (sigaction(SIG_REQ_CORES, &sa, NULL) < 0) {
  147. perror("sigaction: sig_INIT_APP");
  148. exit(1);
  149. }
  150. sa.sa_sigaction = sig_REP_OFFERS_handler;
  151. if (sigaction(SIG_REP_OFFERS, &sa, NULL) < 0) {
  152. perror("sigaction: sig_ALARM");
  153. exit(1);
  154. }
  155. sa.sa_sigaction = sig_INIT_AGENT_handler;
  156. if (sigaction(SIG_INIT_AGENT, &sa, NULL) < 0) {
  157. perror("sigaction: SIG_INIT_AGENT");
  158. exit(1);
  159. }
  160. sa.sa_sigaction = sig_ADD_CORES_DDS_handler;
  161. if (sigaction(SIG_ADD_CORES_DDS, &sa, NULL) < 0) {
  162. perror("sigaction: SIG_ADD_CORES_DDS");
  163. exit(1);
  164. }
  165. sa.sa_sigaction = sig_REM_CORES_DDS_handler;
  166. if (sigaction(SIG_REM_CORES_DDS, &sa, NULL) < 0) {
  167. perror("sigaction: SIG_REM_CORES_DDS");
  168. exit(1);
  169. }
  170. sa.sa_sigaction = sig_FAR_REQ_handler;
  171. if (sigaction(SIG_INIT_FAR_REQ, &sa, NULL) < 0) {
  172. perror("sigaction: SIG_INIT_FAR_REQ");
  173. exit(1);
  174. }
  175. sa.sa_sigaction = sig_FAR_REQ_handler;
  176. if (sigaction(SIG_FAR_REQ, &sa, NULL) < 0) {
  177. perror("sigaction: SIG_FAR_REQ");
  178. exit(1);
  179. }
  180. sa.sa_sigaction = sig_APPOINT_WORK_handler;
  181. if (sigaction(SIG_APPOINT_WORK, &sa, NULL) < 0) {
  182. perror("sigaction: SIG_INIT_RUNNING");
  183. exit(1);
  184. }
  185. sa.sa_sigaction = sig_SEGV_handler;
  186. if (sigaction(SIGSEGV, &sa, NULL) < 0) {
  187. perror("sigaction: SIGSEGV");
  188. exit(1);
  189. }
  190. sa.sa_sigaction = sig_CHECK_REM_TIME_handler;
  191. if (sigaction(SIG_CHECK_REM_TIME, &sa, NULL) < 0) {
  192. perror("sigaction: SIG_CHECK_REM_TIME");
  193. exit(1);
  194. }
  195. sa.sa_sigaction = sig_FINISH_handler;
  196. if (sigaction(SIG_FINISH, &sa, NULL) < 0) {
  197. perror("sigaction: SIGSEGV");
  198. exit(1);
  199. }
  200. sa.sa_sigaction = sig_REJECT_handler;
  201. if (sigaction(SIG_REJECT, &sa, NULL) < 0) {
  202. perror("sigaction: SIG_REJECT");
  203. exit(1);
  204. }
  205. sa.sa_sigaction = sig_REMOVE_FAR_MAN_handler;
  206. if (sigaction(SIG_REMOVE_FAR_MAN, &sa, NULL) < 0) {
  207. perror("sigaction: SIG_REMOVE_FAR_MAN");
  208. exit(1);
  209. }
  210. */
  211. /*
  212. * Ignore SIGPIPE, so that write()s to pipes
  213. * with no reader do not result in us being killed,
  214. * and write() returns EPIPE instead.
  215. *
  216. if (signal(SIGPIPE, SIG_IGN) < 0) {
  217. perror("signal: sigpipe");
  218. exit(1);
  219. }*/
  220. }