From 52ea538bc1c6cc7933c29dec4e1df396bcaebf74 Mon Sep 17 00:00:00 2001 From: Ralph Castain <rhc@open-mpi.org> Date: Mon, 9 Nov 2015 09:00:59 -0800 Subject: [PATCH] Per fix from Nysal: set the listener_active flag before starting the progress thread, and declare the flag to be volatile --- .../pmix/src/server/pmix_server_listener.c | 3 ++- .../pmix1xx/pmix/src/server/pmix_server_ops.h | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_listener.c b/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_listener.c index 7c5b16f4e2..4fe76cfb9c 100644 --- a/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_listener.c +++ b/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_listener.c @@ -145,10 +145,11 @@ pmix_status_t pmix_start_listening(struct sockaddr_un *address) return PMIX_ERR_OUT_OF_RESOURCE; } /* fork off the listener thread */ + pmix_server_globals.listen_thread_active = true; if (0 > pthread_create(&engine, NULL, listen_thread, NULL)) { + pmix_server_globals.listen_thread_active = false; return PMIX_ERROR; } - pmix_server_globals.listen_thread_active = true; } return PMIX_SUCCESS; diff --git a/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_ops.h b/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_ops.h index 9861178759..cfaa949d73 100644 --- a/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_ops.h +++ b/opal/mca/pmix/pmix1xx/pmix/src/server/pmix_server_ops.h @@ -138,14 +138,14 @@ typedef struct { PMIX_CLASS_DECLARATION(pmix_pending_connection_t); typedef struct { - pmix_pointer_array_t clients; // array of pmix_peer_t local clients - pmix_list_t collectives; // list of active pmix_server_trkr_t - pmix_list_t remote_pnd; // list of pmix_dmdx_remote_t awaiting arrival of data fror servicing remote req's - pmix_list_t local_reqs; // list of pmix_dmdx_local_t awaiting arrival of data from local neighbours - bool listen_thread_active; // listen thread is running - int listen_socket; // socket listener is watching - int stop_thread[2]; // pipe used to stop listener thread - pmix_buffer_t gdata; // cache of data given to me for passing to all clients + pmix_pointer_array_t clients; // array of pmix_peer_t local clients + pmix_list_t collectives; // list of active pmix_server_trkr_t + pmix_list_t remote_pnd; // list of pmix_dmdx_remote_t awaiting arrival of data fror servicing remote req's + pmix_list_t local_reqs; // list of pmix_dmdx_local_t awaiting arrival of data from local neighbours + volatile bool listen_thread_active; // listen thread is running + int listen_socket; // socket listener is watching + int stop_thread[2]; // pipe used to stop listener thread + pmix_buffer_t gdata; // cache of data given to me for passing to all clients } pmix_server_globals_t; #define PMIX_PEER_CADDY(c, p, t) \