1
1

btl/scif: start the listening thread once only

Этот коммит содержится в:
Gilles Gouaillardet 2014-10-31 16:34:02 +09:00
родитель ca0b969991
Коммит 76ee98c86a
4 изменённых файлов: 10 добавлений и 5 удалений

Просмотреть файл

@ -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();