btl/scif: start the listening thread once only
Этот коммит содержится в:
родитель
ca0b969991
Коммит
76ee98c86a
@ -93,6 +93,7 @@ typedef struct mca_btl_scif_module_t {
|
||||
pthread_t listen_thread;
|
||||
|
||||
volatile bool exiting;
|
||||
bool listening;
|
||||
} mca_btl_scif_module_t;
|
||||
|
||||
typedef struct mca_btl_scif_component_t {
|
||||
|
@ -98,10 +98,13 @@ int mca_btl_scif_add_procs(struct mca_btl_base_module_t* btl,
|
||||
|
||||
scif_module->endpoint_count = procs_on_board;
|
||||
|
||||
/* start listening thread */
|
||||
rc = pthread_create (&mca_btl_scif_module.listen_thread, NULL, mca_btl_scif_connect_accept, NULL);
|
||||
if (0 > rc) {
|
||||
return OPAL_ERROR;
|
||||
if (!mca_btl_scif_module.listening) {
|
||||
/* start listening thread */
|
||||
rc = pthread_create (&mca_btl_scif_module.listen_thread, NULL, mca_btl_scif_connect_accept, NULL);
|
||||
if (0 > rc) {
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
mca_btl_scif_module.listening = true;
|
||||
}
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
|
@ -267,6 +267,7 @@ static mca_btl_base_module_t **mca_btl_scif_component_init (int *num_btl_modules
|
||||
|
||||
base_modules[0] = &mca_btl_scif_module.super;
|
||||
mca_btl_scif_module.exiting = false;
|
||||
mca_btl_scif_module.listening = false;
|
||||
|
||||
rc = mca_btl_scif_modex_send ();
|
||||
if (OPAL_SUCCESS != rc) {
|
||||
|
@ -126,7 +126,7 @@ mca_btl_scif_module_finalize (struct mca_btl_base_module_t *btl)
|
||||
}
|
||||
|
||||
/* close the listening endpoint */
|
||||
if (-1 != mca_btl_scif_module.scif_fd) {
|
||||
if (mca_btl_scif_module.listening && -1 != mca_btl_scif_module.scif_fd) {
|
||||
/* wake up the scif thread */
|
||||
scif_epd_t tmpfd;
|
||||
tmpfd = scif_open();
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user