From: eitan Date: Wed, 8 Mar 2006 13:41:30 +0000 (+0000) Subject: [OpenSM] - add changes in sigint handling for the linux trunk. X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=9e07e1176d985af1e2a2f33dd67b54a71a495e10;p=~shefty%2Frdma-win.git [OpenSM] - add changes in sigint handling for the linux trunk. git-svn-id: svn://openib.tc.cornell.edu/gen1@234 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- diff --git a/trunk/ulp/opensm/user/include/opensm/osm_console.h b/trunk/ulp/opensm/user/include/opensm/osm_console.h index b63f8b7e..9addec75 100644 --- a/trunk/ulp/opensm/user/include/opensm/osm_console.h +++ b/trunk/ulp/opensm/user/include/opensm/osm_console.h @@ -49,6 +49,7 @@ BEGIN_C_DECLS void osm_console(osm_opensm_t *p_osm); +void osm_console_prompt(void); END_C_DECLS diff --git a/trunk/ulp/opensm/user/include/opensm/osm_opensm.h b/trunk/ulp/opensm/user/include/opensm/osm_opensm.h index a2362156..52f12e51 100644 --- a/trunk/ulp/opensm/user/include/opensm/osm_opensm.h +++ b/trunk/ulp/opensm/user/include/opensm/osm_opensm.h @@ -385,38 +385,12 @@ osm_opensm_wait_for_subnet_up( /****v* OpenSM/osm_exit_flag */ -extern volatile int osm_exit_flag; +extern volatile unsigned int osm_exit_flag; /* * DESCRIPTION * Set to one to cause all threads to leave *********/ -#ifndef __WIN__ -/****f* OpenSM: OpenSM/osm_reg_sig_handler -* NAME -* osm_reg_sig_handler -* -* DESCRIPTION -* Registers the common signal handler -* -* SYNOPSIS -*/ -void osm_reg_sig_handler( -IN osm_opensm_t* const p_osm); -/* -* PARAMETERS -* p_osm -* [in] Pointer to a OpenSM object to handle signals on. -* -* RETURN VALUES -* None -* -* NOTES -* -* SEE ALSO -*********/ -#endif /* __WIN__ */ - END_C_DECLS #endif /* _OSM_OPENSM_H_ */ diff --git a/trunk/ulp/opensm/user/opensm/main.c b/trunk/ulp/opensm/user/opensm/main.c index 245f9484..34e5e411 100644 --- a/trunk/ulp/opensm/user/opensm/main.c +++ b/trunk/ulp/opensm/user/opensm/main.c @@ -66,7 +66,7 @@ instantiating more than one opensm object. */ osm_opensm_t osm; -volatile int osm_exit_flag = 0; +volatile unsigned int osm_exit_flag = 0; #define GUID_ARRAY_SIZE 64 #define INVALID_GUID (0xFFFFFFFFFFFFFFFFULL) diff --git a/trunk/ulp/opensm/user/opensm/osm_console.c b/trunk/ulp/opensm/user/opensm/osm_console.c index 48731ca6..a0f36f04 100644 --- a/trunk/ulp/opensm/user/opensm/osm_console.c +++ b/trunk/ulp/opensm/user/opensm/osm_console.c @@ -38,6 +38,7 @@ #define _GNU_SOURCE /* for getline */ #include #include +#include #include #define OSM_COMMAND_LINE_LEN 120 @@ -185,15 +186,27 @@ static void parse_cmd_line(char *line, osm_opensm_t *p_osm) } } +void osm_console_prompt(void) +{ + printf("%s", OSM_COMMAND_PROMPT); + fflush(stdout); +} + void osm_console(osm_opensm_t *p_osm) { + struct pollfd pollfd; char *p_line; size_t len; ssize_t n; - printf("\nOpenSM Console\n\n"); - while (1) { - printf("%s", OSM_COMMAND_PROMPT); + pollfd.fd = 0; + pollfd.events = POLLIN; + pollfd.revents = 0; + + if (poll(&pollfd, 1, 10000) <= 0) + return; + + if (pollfd.revents|POLLIN) { p_line = NULL; /* Get input line */ n = getline(&p_line, &len, stdin); @@ -205,6 +218,7 @@ void osm_console(osm_opensm_t *p_osm) printf("Input error\n"); fflush(stdin); } + osm_console_prompt(); } } diff --git a/trunk/ulp/opensm/user/opensm/osm_opensm.c b/trunk/ulp/opensm/user/opensm/osm_opensm.c index 87135a3c..f2b5dba3 100644 --- a/trunk/ulp/opensm/user/opensm/osm_opensm.c +++ b/trunk/ulp/opensm/user/opensm/osm_opensm.c @@ -51,7 +51,6 @@ #include #include #include -#include #include #include #include @@ -145,52 +144,6 @@ osm_opensm_create_mcgroups( OSM_LOG_EXIT( &p_osm->log ); } -/********************************************************************** - * SHUT DOWN IS CONTROLLED BY A GLOBAL EXIT FLAG - **********************************************************************/ -#ifndef __WIN__ -static osm_opensm_t *__p_osm_to_signal; - -void -__sig_handler( - int signum ) -{ - static int got_signal = 0; - - if( signum != SIGHUP ) - { - if( !got_signal ) - { - got_signal++; - printf( "OpenSM: Got signal %d - exiting...\n", signum ); - osm_exit_flag = 1; - } - } - else - { - /* a HUP signal should only start a new heavy sweep */ - __p_osm_to_signal->subn.force_immediate_heavy_sweep = TRUE; - osm_state_mgr_process( &__p_osm_to_signal->sm.state_mgr, - OSM_SIGNAL_SWEEP ); - } -} - -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 - cl_reg_sig_hdl( SIGTERM, __sig_handler ); - cl_reg_sig_hdl( SIGHUP, __sig_handler ); - osm_exit_flag = 0; - - return; -} -#endif /* __WIN__ */ - /********************************************************************** **********************************************************************/ ib_api_status_t diff --git a/trunk/ulp/opensm/user/opensm/osm_sm.c b/trunk/ulp/opensm/user/opensm/osm_sm.c index e3956be8..3d357e55 100644 --- a/trunk/ulp/opensm/user/opensm/osm_sm.c +++ b/trunk/ulp/opensm/user/opensm/osm_sm.c @@ -57,7 +57,6 @@ #include #include #include -#include #include #include #include @@ -84,10 +83,6 @@ __osm_sm_sweeper( if( p_sm->thread_state == OSM_THREAD_STATE_INIT ) { - osm_log( p_sm->p_log, OSM_LOG_DEBUG, - "__osm_sm_sweeper: " "Masking ^C Signals\n" ); - cl_sig_mask_sigint( ); - p_sm->thread_state = OSM_THREAD_STATE_RUN; } diff --git a/trunk/ulp/opensm/user/opensm/osm_vl15intf.c b/trunk/ulp/opensm/user/opensm/osm_vl15intf.c index 62cedd15..12e70081 100644 --- a/trunk/ulp/opensm/user/opensm/osm_vl15intf.c +++ b/trunk/ulp/opensm/user/opensm/osm_vl15intf.c @@ -53,7 +53,6 @@ #endif /* HAVE_CONFIG_H */ #include -#include #include #include #include @@ -82,7 +81,6 @@ __osm_vl15_poller( if ( p_vl->thread_state == OSM_THREAD_STATE_NONE) { - cl_sig_mask_sigint( ); p_vl->thread_state = OSM_THREAD_STATE_RUN; }