This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "MPICH primary repository". The branch, master has been updated via 8f196d6f1209a8a652adf495f3cd5a138b05f4e3 (commit) via 433cc4a53ab3b3858b7a0ad40f45574ec4cddd0c (commit) via 47f36a20357a7612b4a186a8d96a6d3819e558ed (commit) via 0caa766bf38fcd8f037d1d59d8dba4489072280d (commit) via 2b9276df85fabd0c21883dcb8cd81f3e7c7bdd02 (commit) from ff7e3f37effa1132126dfe9616b8a563c61cc91b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://git.mpich.org/mpich.git/commitdiff/8f196d6f1209a8a652adf495f3cd5a138b... commit 8f196d6f1209a8a652adf495f3cd5a138b05f4e3 Author: Gengbin Zheng <[email protected]> Date: Fri Feb 26 00:36:24 2016 -0600 CH4PREREQ: POBJ Threads: fix race condition In thread multiple with per-obj locks, function MPIR_Get_contextid_sparse() may be called from multiple threads. And accessing global/static variables like next_gcn and mask_in_use need to protected to prevent race condition. Signed-off-by: Ken Raffenetti <[email protected]> diff --git a/src/mpi/comm/contextid.c b/src/mpi/comm/contextid.c index 5951b60..bffb158 100644 --- a/src/mpi/comm/contextid.c +++ b/src/mpi/comm/contextid.c @@ -618,8 +618,11 @@ int MPIR_Get_contextid_sparse_group(MPIR_Comm * comm_ptr, MPIR_Group * group_ptr if (st.first_iter == 1) { st.first_iter = 0; /* to avoid deadlocks, the element is not added to the list bevore the first iteration */ - if (!ignore_id && *context_id == 0) + if (!ignore_id && *context_id == 0) { + MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX); add_gcn_to_list(&st); + MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX); + } } } @@ -633,8 +636,8 @@ int MPIR_Get_contextid_sparse_group(MPIR_Comm * comm_ptr, MPIR_Group * group_ptr /* --BEGIN ERROR HANDLING-- */ fn_fail: /* Release the masks */ + MPID_THREAD_CS_ENTER(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX); if (st.own_mask) { - /* is it safe to access this without holding the CS? */ mask_in_use = 0; } /*If in list, remove it */ @@ -647,6 +650,7 @@ int MPIR_Get_contextid_sparse_group(MPIR_Comm * comm_ptr, MPIR_Group * group_ptr tmp->next = st.next; } } + MPID_THREAD_CS_EXIT(POBJ, MPIR_THREAD_POBJ_CTX_MUTEX); goto fn_exit; http://git.mpich.org/mpich.git/commitdiff/433cc4a53ab3b3858b7a0ad40f45574ec4... commit 433cc4a53ab3b3858b7a0ad40f45574ec4cddd0c Author: Hajime Fujita <[email protected]> Date: Tue May 24 11:08:31 2016 -0500 CH4PREREQ: Remove obsolete debug macro Signed-off-by: Ken Raffenetti <[email protected]> diff --git a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h index 3974407..e3be01b 100644 --- a/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h +++ b/src/mpid/ch3/channels/nemesis/netmod/ofi/ofi_impl.h @@ -251,7 +251,6 @@ static inline int MPID_nem_ofi_create_req(MPIR_Request ** request, int refcnt) MPIR_Request *req; req = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED); MPIR_Assert(req); - MPIDI_Request_clear_dbg(req); MPIR_Object_set_ref(req, refcnt); MPID_nem_ofi_init_req(req); *request = req; diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h index b8fb113..e7d2456 100644 --- a/src/mpid/ch3/include/mpidimpl.h +++ b/src/mpid/ch3/include/mpidimpl.h @@ -266,12 +266,6 @@ extern MPIDI_Process_t MPIDI_Process; #define MPIDI_CH3_REQUEST_INIT(a_) #endif -#ifdef HAVE_DEBUGGER_SUPPORT -#define MPIDI_Request_clear_dbg(sreq_) ((sreq_)->u.send.dbg_next = NULL) -#else -#define MPIDI_Request_clear_dbg(sreq_) -#endif - /* FIXME: Why does a send request need the match information? Is that for debugging information? In case the initial envelope cannot be sent? Ditto for the dev.user_buf, count, and datatype @@ -299,7 +293,6 @@ extern MPIDI_Process_t MPIDI_Process; (sreq_)->dev.user_count = count; \ (sreq_)->dev.datatype = datatype; \ (sreq_)->dev.iov_count = 0; \ - MPIDI_Request_clear_dbg(sreq_); \ } /* This is the receive request version of MPIDI_Request_create_sreq */ http://git.mpich.org/mpich.git/commitdiff/47f36a20357a7612b4a186a8d96a6d3819... commit 47f36a20357a7612b4a186a8d96a6d3819e558ed Author: Hajime Fujita <[email protected]> Date: Tue May 24 11:10:19 2016 -0500 CH4PREREQ: Clear send.dbg_next on request creation Clear the dbg_next, else it could cause a crash. Signed-off-by: Ken Raffenetti <[email protected]> diff --git a/src/include/mpir_debugger.h b/src/include/mpir_debugger.h index 67dc5f8..1287c7c 100644 --- a/src/include/mpir_debugger.h +++ b/src/include/mpir_debugger.h @@ -26,11 +26,13 @@ void MPII_CommL_forget( MPIR_Comm * ); #define MPII_SENDQ_FORGET(_a) MPII_Sendq_forget(_a) #define MPII_COMML_REMEMBER(_a) MPII_CommL_remember( _a ) #define MPII_COMML_FORGET(_a) MPII_CommL_forget( _a ) +#define MPII_REQUEST_CLEAR_DBG(_r) ((_r)->u.send.dbg_next = NULL) #else #define MPII_SENDQ_REMEMBER(a,b,c,d) #define MPII_SENDQ_FORGET(a) #define MPII_COMML_REMEMBER(_a) #define MPII_COMML_FORGET(_a) +#define MPII_REQUEST_CLEAR_DBG(_r) #endif #endif /* MPIR_DEBUGGER_H_INCLUDED */ diff --git a/src/include/mpir_request.h b/src/include/mpir_request.h index 475616f..af212ed 100644 --- a/src/include/mpir_request.h +++ b/src/include/mpir_request.h @@ -214,6 +214,9 @@ static inline MPIR_Request *MPIR_Request_create(MPIR_Request_kind_t kind) req->request_completed_cb = NULL; switch(kind) { + case MPIR_REQUEST_KIND__SEND: + MPII_REQUEST_CLEAR_DBG(req); + break; case MPIR_REQUEST_KIND__COLL: req->u.nbc.errflag = MPIR_ERR_NONE; break; http://git.mpich.org/mpich.git/commitdiff/0caa766bf38fcd8f037d1d59d8dba44890... commit 0caa766bf38fcd8f037d1d59d8dba4489072280d Author: Hajime Fujita <[email protected]> Date: Tue May 24 11:09:11 2016 -0500 CH4PREREQ: Create sreq with REQUEST_KIND__SEND Signed-off-by: Ken Raffenetti <[email protected]> diff --git a/src/mpid/ch3/include/mpidimpl.h b/src/mpid/ch3/include/mpidimpl.h index 506e9d6..b8fb113 100644 --- a/src/mpid/ch3/include/mpidimpl.h +++ b/src/mpid/ch3/include/mpidimpl.h @@ -287,9 +287,8 @@ extern MPIDI_Process_t MPIDI_Process; */ #define MPIDI_Request_create_sreq(sreq_, mpi_errno_, FAIL_) \ { \ - (sreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__UNDEFINED); \ + (sreq_) = MPIR_Request_create(MPIR_REQUEST_KIND__SEND); \ MPIR_Object_set_ref((sreq_), 2); \ - (sreq_)->kind = MPIR_REQUEST_KIND__SEND; \ (sreq_)->comm = comm; \ (sreq_)->dev.partner_request = NULL; \ MPIR_Comm_add_ref(comm); \ http://git.mpich.org/mpich.git/commitdiff/2b9276df85fabd0c21883dcb8cd81f3e7c... commit 2b9276df85fabd0c21883dcb8cd81f3e7c7bdd02 Author: Charles J Archer <[email protected]> Date: Tue Dec 15 06:41:03 2015 -0800 CH4PREREQ: Properly initialize mutexes for per-object builds Signed-off-by: Ken Raffenetti <[email protected]> diff --git a/src/mpi/comm/commutil.c b/src/mpi/comm/commutil.c index 305fb9c..53190ec 100644 --- a/src/mpi/comm/commutil.c +++ b/src/mpi/comm/commutil.c @@ -70,7 +70,7 @@ static struct MPIR_Comm_hint_fn_elt *MPID_hint_fns = NULL; * !!! The resulting struct is _not_ ready for communication !!! */ int MPII_Comm_init(MPIR_Comm * comm_p) { - int mpi_errno = MPI_SUCCESS; + int thr_err, mpi_errno = MPI_SUCCESS; MPIR_Object_set_ref(comm_p, 1); @@ -104,6 +104,10 @@ int MPII_Comm_init(MPIR_Comm * comm_p) comm_p->mapper_head = NULL; comm_p->mapper_tail = NULL; +#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ + MPID_Thread_mutex_create(&MPIR_THREAD_POBJ_COMM_MUTEX(comm_p), &thr_err); + MPIR_Assert(thr_err == 0); +#endif /* Fields not set include context_id, remote and local size, and * kind, since different communicator construction routines need * different values */ @@ -921,7 +925,7 @@ int MPII_Comm_copy_data(MPIR_Comm * comm_ptr, MPIR_Comm ** outcomm_ptr) #define FCNAME MPL_QUOTE(FUNCNAME) int MPIR_Comm_delete_internal(MPIR_Comm * comm_ptr) { - int in_use; + int in_use,thr_err; int mpi_errno = MPI_SUCCESS; MPIR_FUNC_TERSE_STATE_DECL(MPID_STATE_COMM_DELETE_INTERNAL); @@ -999,6 +1003,10 @@ int MPIR_Comm_delete_internal(MPIR_Comm * comm_ptr) * allocated out of the remote group's bit vector, not ours. */ MPIR_Free_contextid(comm_ptr->recvcontext_id); +#if MPICH_THREAD_GRANULARITY == MPICH_THREAD_GRANULARITY__POBJ + MPID_Thread_mutex_destroy(&MPIR_THREAD_POBJ_COMM_MUTEX(comm_ptr), &thr_err); + MPIR_Assert(thr_err == 0); +#endif /* We need to release the error handler */ if (comm_ptr->errhandler && !(HANDLE_GET_KIND(comm_ptr->errhandler->handle) == HANDLE_KIND_BUILTIN)) { ----------------------------------------------------------------------- Summary of changes: src/include/mpir_debugger.h | 2 ++ src/include/mpir_request.h | 3 +++ src/mpi/comm/commutil.c | 12 ++++++++++-- src/mpi/comm/contextid.c | 8 ++++++-- .../ch3/channels/nemesis/netmod/ofi/ofi_impl.h | 1 - src/mpid/ch3/include/mpidimpl.h | 10 +--------- 6 files changed, 22 insertions(+), 14 deletions(-) hooks/post-receive -- MPICH primary repository