aboutsummaryrefslogtreecommitdiff
path: root/src/util/scheduler.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/scheduler.c')
-rw-r--r--src/util/scheduler.c48
1 files changed, 33 insertions, 15 deletions
diff --git a/src/util/scheduler.c b/src/util/scheduler.c
index e9c25d68a..540a60557 100644
--- a/src/util/scheduler.c
+++ b/src/util/scheduler.c
@@ -787,6 +787,14 @@ void
787GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_TaskCallback task, 787GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_TaskCallback task,
788 void *task_cls) 788 void *task_cls)
789{ 789{
790 GNUNET_SCHEDULER_run_with_optional_signals(GNUNET_YES, task, task_cls);
791}
792
793void
794GNUNET_SCHEDULER_run_with_optional_signals (int install_signals,
795 GNUNET_SCHEDULER_TaskCallback task,
796 void *task_cls)
797{
790 struct GNUNET_NETWORK_FDSet *rs; 798 struct GNUNET_NETWORK_FDSet *rs;
791 struct GNUNET_NETWORK_FDSet *ws; 799 struct GNUNET_NETWORK_FDSet *ws;
792 struct GNUNET_TIME_Relative timeout; 800 struct GNUNET_TIME_Relative timeout;
@@ -820,24 +828,29 @@ GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_TaskCallback task,
820 GNUNET_DISK_PIPE_END_READ); 828 GNUNET_DISK_PIPE_END_READ);
821 GNUNET_assert (NULL != pr); 829 GNUNET_assert (NULL != pr);
822 my_pid = getpid (); 830 my_pid = getpid ();
823 LOG (GNUNET_ERROR_TYPE_DEBUG, 831
824 "Registering signal handlers\n"); 832 if (GNUNET_YES == install_signals)
825 shc_int = GNUNET_SIGNAL_handler_install (SIGINT, 833 {
834 LOG (GNUNET_ERROR_TYPE_DEBUG,
835 "Registering signal handlers\n");
836 shc_int = GNUNET_SIGNAL_handler_install (SIGINT,
837 &sighandler_shutdown);
838 shc_term = GNUNET_SIGNAL_handler_install (SIGTERM,
826 &sighandler_shutdown); 839 &sighandler_shutdown);
827 shc_term = GNUNET_SIGNAL_handler_install (SIGTERM,
828 &sighandler_shutdown);
829#if (SIGTERM != GNUNET_TERM_SIG) 840#if (SIGTERM != GNUNET_TERM_SIG)
830 shc_gterm = GNUNET_SIGNAL_handler_install (GNUNET_TERM_SIG, 841 shc_gterm = GNUNET_SIGNAL_handler_install (GNUNET_TERM_SIG,
831 &sighandler_shutdown); 842 &sighandler_shutdown);
832#endif 843#endif
833#ifndef MINGW 844#ifndef MINGW
834 shc_pipe = GNUNET_SIGNAL_handler_install (SIGPIPE, 845 shc_pipe = GNUNET_SIGNAL_handler_install (SIGPIPE,
835 &sighandler_pipe); 846 &sighandler_pipe);
836 shc_quit = GNUNET_SIGNAL_handler_install (SIGQUIT, 847 shc_quit = GNUNET_SIGNAL_handler_install (SIGQUIT,
837 &sighandler_shutdown); 848 &sighandler_shutdown);
838 shc_hup = GNUNET_SIGNAL_handler_install (SIGHUP, 849 shc_hup = GNUNET_SIGNAL_handler_install (SIGHUP,
839 &sighandler_shutdown); 850 &sighandler_shutdown);
840#endif 851#endif
852 }
853
841 current_priority = GNUNET_SCHEDULER_PRIORITY_DEFAULT; 854 current_priority = GNUNET_SCHEDULER_PRIORITY_DEFAULT;
842 current_lifeness = GNUNET_YES; 855 current_lifeness = GNUNET_YES;
843 GNUNET_SCHEDULER_add_with_reason_and_priority (task, 856 GNUNET_SCHEDULER_add_with_reason_and_priority (task,
@@ -953,16 +966,21 @@ GNUNET_SCHEDULER_run (GNUNET_SCHEDULER_TaskCallback task,
953 busy_wait_warning = 0; 966 busy_wait_warning = 0;
954 } 967 }
955 } 968 }
956 GNUNET_SIGNAL_handler_uninstall (shc_int); 969
957 GNUNET_SIGNAL_handler_uninstall (shc_term); 970 if (GNUNET_YES == install_signals)
971 {
972 GNUNET_SIGNAL_handler_uninstall (shc_int);
973 GNUNET_SIGNAL_handler_uninstall (shc_term);
958#if (SIGTERM != GNUNET_TERM_SIG) 974#if (SIGTERM != GNUNET_TERM_SIG)
959 GNUNET_SIGNAL_handler_uninstall (shc_gterm); 975 GNUNET_SIGNAL_handler_uninstall (shc_gterm);
960#endif 976#endif
961#ifndef MINGW 977#ifndef MINGW
962 GNUNET_SIGNAL_handler_uninstall (shc_pipe); 978 GNUNET_SIGNAL_handler_uninstall (shc_pipe);
963 GNUNET_SIGNAL_handler_uninstall (shc_quit); 979 GNUNET_SIGNAL_handler_uninstall (shc_quit);
964 GNUNET_SIGNAL_handler_uninstall (shc_hup); 980 GNUNET_SIGNAL_handler_uninstall (shc_hup);
965#endif 981#endif
982 }
983
966 GNUNET_DISK_pipe_close (shutdown_pipe_handle); 984 GNUNET_DISK_pipe_close (shutdown_pipe_handle);
967 shutdown_pipe_handle = NULL; 985 shutdown_pipe_handle = NULL;
968 GNUNET_NETWORK_fdset_destroy (rs); 986 GNUNET_NETWORK_fdset_destroy (rs);