[openib-general] RE: Re[PATCH] Opensm - clean exit on ^C
Yael Kalka
yael at mellanox.co.il
Tue Jan 10 23:17:17 PST 2006
Hi Hal,
In revision 3526 you've added a patch that opensm will not handle SIGINT.
This patch is an addition to that patch. If OpenSM doesn't handle SIGINT,
then none of its threads should handle it either.
Yael
-----Original Message-----
From: Hal Rosenstock [mailto:halr at voltaire.com]
Sent: Monday, January 09, 2006 4:56 PM
To: Yael Kalka
Cc: openib-general at openib.org; Eitan Zahavi
Subject: Re: Re[PATCH] Opensm - clean exit on ^C
Hi Yael,
On Thu, 2006-01-05 at 07:16, Yael Kalka wrote:
> Hi Hal,
>
> I've noticed that sometimes when killing OpenSM using ^C not all
> threads are killed.
> The reason for that is that there are threads that mask the
> signalling, and when removing the ^C handling from OpenSM, these
> threads still mask the signalling and stay alive as a result.
> The following patch fixes this.
Is there one other piece to this ? Doesn't osm_opensm.c need to be
modified to handle SIGINT for OSM_VENDOR_INTF_OPENIB ? Thanks.
void
osm_reg_sig_handler(
IN osm_opensm_t * const p_osm )
{
__p_osm_to_signal = p_osm;
#ifndef OSM_VENDOR_INTF_OPENIB
cl_reg_sig_hdl( SIGINT, __sig_handler );
#endif
-- Hal
> Thanks,
> Yael
>
> Signed-off-by: Yael Kalka <yael at mellanox.co.il>
>
> Index: include/complib/cl_signal_osd.h
> ===================================================================
> --- include/complib/cl_signal_osd.h (revision 4760)
> +++ include/complib/cl_signal_osd.h (working copy)
> @@ -148,12 +148,14 @@ cl_sig_mask_sigint(void)
> #ifdef __WIN__
> /* we do not mask kill */
> #else
> +#ifndef OSM_VENDOR_INTF_OPENIB
> sigset_t sigs;
>
> sigemptyset(&sigs);
> sigaddset(&sigs, SIGINT);
> pthread_sigmask(SIG_BLOCK, &sigs, NULL);
> - #endif
> +#endif /* OSM_VENDOR_INTF_OPENIB */
> +#endif /* __WIN__ */
> }
> /*
> *********/
> Index: libvendor/osm_vendor_ibumad.c
> ===================================================================
> --- libvendor/osm_vendor_ibumad.c (revision 4760)
> +++ libvendor/osm_vendor_ibumad.c (working copy)
> @@ -244,10 +244,6 @@ umad_receiver(void *p_ptr)
>
> OSM_LOG_ENTER( p_ur->p_log, umad_receiver );
>
> - sigemptyset(&sigs);
> - sigaddset(&sigs, SIGINT);
> - pthread_sigmask(SIG_BLOCK, &sigs, NULL);
> -
> for (;;) {
> if (!umad &&
> !(umad = umad_alloc(1, umad_size() + MAD_BLOCK_SIZE))) {
>
More information about the general
mailing list