@@ -135,18 +135,31 @@ mono_runtime_shutdown_handlers (void)
135135static GHashTable * mono_saved_signal_handlers = NULL ;
136136
137137static struct sigaction *
138- get_saved_signal_handler (int signo , gboolean remove )
138+ get_saved_signal_handler (int signo )
139139{
140140 if (mono_saved_signal_handlers ) {
141141 /* The hash is only modified during startup, so no need for locking */
142142 struct sigaction * handler = (struct sigaction * )g_hash_table_lookup (mono_saved_signal_handlers , GINT_TO_POINTER (signo ));
143- if (remove && handler )
144- g_hash_table_remove (mono_saved_signal_handlers , GINT_TO_POINTER (signo ));
145143 return handler ;
146144 }
147145 return NULL ;
148146}
149147
148+
149+ static void
150+ remove_saved_signal_handler (int signo )
151+ {
152+ if (mono_saved_signal_handlers ) {
153+ /* The hash is only modified during startup, so no need for locking */
154+ struct sigaction * handler = (struct sigaction * )g_hash_table_lookup (mono_saved_signal_handlers , GINT_TO_POINTER (signo ));
155+ if (handler )
156+ g_hash_table_remove (mono_saved_signal_handlers , GINT_TO_POINTER (signo ));
157+ }
158+ return ;
159+ }
160+
161+
162+
150163static void
151164save_old_signal_handler (int signo , struct sigaction * old_action )
152165{
@@ -181,7 +194,7 @@ gboolean
181194MONO_SIG_HANDLER_SIGNATURE (mono_chain_signal )
182195{
183196 int signal = MONO_SIG_HANDLER_GET_SIGNO ();
184- struct sigaction * saved_handler = (struct sigaction * )get_saved_signal_handler (signal , FALSE );
197+ struct sigaction * saved_handler = (struct sigaction * )get_saved_signal_handler (signal );
185198
186199 if (saved_handler && saved_handler -> sa_handler ) {
187200 if (!(saved_handler -> sa_flags & SA_SIGINFO )) {
@@ -376,7 +389,7 @@ static void
376389remove_signal_handler (int signo )
377390{
378391 struct sigaction sa ;
379- struct sigaction * saved_action = get_saved_signal_handler (signo , TRUE );
392+ struct sigaction * saved_action = get_saved_signal_handler (signo );
380393
381394 if (!saved_action ) {
382395 sa .sa_handler = SIG_DFL ;
@@ -387,6 +400,7 @@ remove_signal_handler (int signo)
387400 } else {
388401 g_assert (sigaction (signo , saved_action , NULL ) != -1 );
389402 }
403+ remove_saved_signal_handler (signo );
390404}
391405
392406void
0 commit comments