signal.c 922 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <nwthread.h>
  2. #include <nwerrno.h>
  3. /*******************************/
  4. /* Interupt handler */
  5. /*******************************/
  6. int NLM_mainThreadGroupID;
  7. int NLM_threadCnt = 0;
  8. int NLM_exiting = FALSE;
  9. #pragma off(unreferenced);
  10. void NLM_SignalHandler(int sig)
  11. #pragma on(unreferenced);
  12. {
  13. int handlerThreadGroupID;
  14. switch(sig)
  15. {
  16. case SIGTERM:
  17. NLM_exiting = TRUE;
  18. handlerThreadGroupID = GetThreadGroupID();
  19. SetThreadGroupID(NLM_mainThreadGroupID);
  20. /* NLM SDK functions may be called here */
  21. while (NLM_threadCnt != 0)
  22. ThreadSwitchWithDelay();
  23. SetThreadGroupID(handlerThreadGroupID);
  24. break;
  25. case SIGINT:
  26. signal(SIGINT, NLM_SignalHandler);
  27. break;
  28. }
  29. return;
  30. }
  31. void NLMsignals(void)
  32. {
  33. ++NLM_threadCnt;
  34. NLM_mainThreadGroupID = GetThreadGroupID();
  35. signal(SIGTERM, NLM_SignalHandler);
  36. signal(SIGINT, NLM_SignalHandler);
  37. }
  38. void NLMexit(void)
  39. {
  40. --NLM_threadCnt;
  41. }