sig_aux.c~ 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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_INIT_handler;
  110. if (sigaction(SIG_INIT, &sa, NULL) < 0) {
  111. perror("sigaction: sig_INIT");
  112. exit(1);
  113. }
  114. sa.sa_sigaction = sig_ACK_handler;
  115. if (sigaction(SIG_ACK, &sa, NULL) < 0) {
  116. perror("sigaction: sig_ack");
  117. exit(1);
  118. }
  119. sa.sa_sigaction = sig_TERMINATE_handler;
  120. if (sigaction(SIG_TERMINATE, &sa, NULL) < 0) {
  121. perror("sigaction: sig_term");
  122. exit(1);
  123. }
  124. sa.sa_sigaction = sig_INIT_APP_handler;
  125. if (sigaction(SIG_INIT_APP, &sa, NULL) < 0) {
  126. perror("sigaction: sig_INIT_APP");
  127. exit(1);
  128. }
  129. sa.sa_sigaction = sig_IDAG_FIND_IDAGS_handler;
  130. if (sigaction(SIG_IDAG_FIND_IDAGS, &sa, NULL) < 0) {
  131. perror("sigaction: sig_INIT_APP");
  132. exit(1);
  133. }
  134. sa.sa_sigaction = sig_REQ_DDS_handler;
  135. if (sigaction(SIG_REQ_DDS, &sa, NULL) < 0) {
  136. perror("sigaction: sig_INIT_APP");
  137. exit(1);
  138. }
  139. sa.sa_sigaction = sig_REQ_CORES_handler;
  140. if (sigaction(SIG_REQ_CORES, &sa, NULL) < 0) {
  141. perror("sigaction: sig_INIT_APP");
  142. exit(1);
  143. }
  144. /*sa.sa_sigaction = sig_ALARM_handler;
  145. if (sigaction(SIGALRM, &sa, NULL) < 0) {
  146. perror("sigaction: sig_ALARM");
  147. exit(1);
  148. }*/
  149. sa.sa_sigaction = sig_REP_OFFERS_handler;
  150. if (sigaction(SIG_REP_OFFERS, &sa, NULL) < 0) {
  151. perror("sigaction: sig_ALARM");
  152. exit(1);
  153. }
  154. sa.sa_sigaction = sig_INIT_AGENT_handler;
  155. if (sigaction(SIG_INIT_AGENT, &sa, NULL) < 0) {
  156. perror("sigaction: SIG_INIT_AGENT");
  157. exit(1);
  158. }
  159. sa.sa_sigaction = sig_ADD_CORES_DDS_handler;
  160. if (sigaction(SIG_ADD_CORES_DDS, &sa, NULL) < 0) {
  161. perror("sigaction: SIG_ADD_CORES_DDS");
  162. exit(1);
  163. }
  164. sa.sa_sigaction = sig_REM_CORES_DDS_handler;
  165. if (sigaction(SIG_REM_CORES_DDS, &sa, NULL) < 0) {
  166. perror("sigaction: SIG_REM_CORES_DDS");
  167. exit(1);
  168. }
  169. sa.sa_sigaction = sig_FAR_REQ_handler;
  170. if (sigaction(SIG_INIT_FAR_REQ, &sa, NULL) < 0) {
  171. perror("sigaction: SIG_INIT_FAR_REQ");
  172. exit(1);
  173. }
  174. sa.sa_sigaction = sig_FAR_REQ_handler;
  175. if (sigaction(SIG_FAR_REQ, &sa, NULL) < 0) {
  176. perror("sigaction: SIG_FAR_REQ");
  177. exit(1);
  178. }
  179. sa.sa_sigaction = sig_APPOINT_WORK_handler;
  180. if (sigaction(SIG_APPOINT_WORK, &sa, NULL) < 0) {
  181. perror("sigaction: SIG_INIT_RUNNING");
  182. exit(1);
  183. }
  184. sa.sa_sigaction = sig_SEGV_handler;
  185. if (sigaction(SIGSEGV, &sa, NULL) < 0) {
  186. perror("sigaction: SIGSEGV");
  187. exit(1);
  188. }
  189. sa.sa_sigaction = sig_TIMER_handler;
  190. if (sigaction(SIG_TIMER, &sa, NULL) < 0) {
  191. perror("sigaction: SIG_TIMER");
  192. exit(1);
  193. }
  194. sa.sa_sigaction = sig_CHECK_REM_TIME_handler;
  195. if (sigaction(SIG_CHECK_REM_TIME, &sa, NULL) < 0) {
  196. perror("sigaction: SIG_CHECK_REM_TIME");
  197. exit(1);
  198. }
  199. sa.sa_sigaction = sig_FINISH_handler;
  200. if (sigaction(SIG_FINISH, &sa, NULL) < 0) {
  201. perror("sigaction: SIGSEGV");
  202. exit(1);
  203. }
  204. sa.sa_sigaction = sig_REJECT_handler;
  205. if (sigaction(SIG_REJECT, &sa, NULL) < 0) {
  206. perror("sigaction: SIG_REJECT");
  207. exit(1);
  208. }
  209. sa.sa_sigaction = sig_REMOVE_FAR_MAN_handler;
  210. if (sigaction(SIG_REMOVE_FAR_MAN, &sa, NULL) < 0) {
  211. perror("sigaction: SIG_REMOVE_FAR_MAN");
  212. exit(1);
  213. }
  214. /*
  215. * Ignore SIGPIPE, so that write()s to pipes
  216. * with no reader do not result in us being killed,
  217. * and write() returns EPIPE instead.
  218. */
  219. if (signal(SIGPIPE, SIG_IGN) < 0) {
  220. perror("signal: sigpipe");
  221. exit(1);
  222. }
  223. }