diff --git a/src/class/ompi_object.h b/src/class/ompi_object.h index 5c7c770ea7..7b4f89bb42 100644 --- a/src/class/ompi_object.h +++ b/src/class/ompi_object.h @@ -407,34 +407,22 @@ static inline int ompi_obj_update(ompi_object_t *object, int inc) { #ifdef WIN32 - int newval; LONG volatile *addr; addr = (LONG volatile *) &(object->obj_reference_count); - newval = (int) InterlockedExchangeAdd(addr, (LONG) inc) + inc; + (void)InterlockedExchangeAdd(addr, (LONG) inc) + inc; #elif OMPI_HAVE_ATOMIC - int newval; - int oldval; - volatile int *addr; - - addr = (volatile int *) &(object->obj_reference_count); - do { - oldval = *addr; - newval = oldval + inc; - } while (ompi_atomic_cmpset_int(addr, oldval, newval) == 0); + ompi_atomic_add(&(object->obj_reference_count), 1 ); #else - int newval; - object->obj_reference_count += inc; - newval = object->obj_reference_count; #endif - return newval; + return object->obj_reference_count; } /**********************************************************************/ diff --git a/src/mca/pml/base/pml_base_sendreq.h b/src/mca/pml/base/pml_base_sendreq.h index 5d5b083717..73496ac835 100644 --- a/src/mca/pml/base/pml_base_sendreq.h +++ b/src/mca/pml/base/pml_base_sendreq.h @@ -128,16 +128,13 @@ static inline bool mca_pml_base_send_request_matched( * * @param request (IN) Send request. * @param offset (IN) Increment. - * return TRUE if an ack/match has been received from peer. */ static inline void mca_pml_base_send_request_offset( mca_pml_base_send_request_t* request, size_t offset) { - OMPI_THREAD_LOCK(&ompi_request_lock); - request->req_offset += offset; - OMPI_THREAD_UNLOCK(&ompi_request_lock); + ompi_atomic_add( &(request->req_offset), offset ); } #if defined(c_plusplus) || defined(__cplusplus) diff --git a/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.h b/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.h index 46bffd220e..a6a8240882 100644 --- a/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.h +++ b/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.h @@ -119,7 +119,7 @@ static inline void mca_ptl_tcp_recv_frag_progress(mca_ptl_tcp_recv_frag_t* frag) if((frag)->frag_msg_cnt >= frag->frag_recv.frag_base.frag_header.hdr_frag.hdr_frag_length) { /* make sure this only happens once for threaded case */ - if(ompi_atomic_fetch_and_set_int(&frag->frag_progressed, 1) == 0) { + if(ompi_atomic_cmpset(&frag->frag_progressed, 0, 1) == 1) { mca_pml_base_recv_request_t* request = frag->frag_recv.frag_request; if(frag->frag_recv.frag_is_buffered) { mca_ptl_base_match_header_t* header = &(frag)->frag_recv.frag_base.frag_header.hdr_match; diff --git a/src/mca/ptl/tcp/src/ptl_tcp_sendfrag.h b/src/mca/ptl/tcp/src/ptl_tcp_sendfrag.h index 8a29b58f67..abd2861ac3 100644 --- a/src/mca/ptl/tcp/src/ptl_tcp_sendfrag.h +++ b/src/mca/ptl/tcp/src/ptl_tcp_sendfrag.h @@ -94,7 +94,7 @@ static inline void mca_ptl_tcp_send_frag_progress(mca_ptl_tcp_send_frag_t* frag) mca_pml_base_send_request_matched(request))) { /* make sure this only happens once in threaded case */ - if(ompi_atomic_fetch_and_set_int(&frag->frag_progressed,1) == 0) { + if(ompi_atomic_cmpset(&frag->frag_progressed, 0, 1) == 1) { /* update request status */ frag->frag_send.frag_base.frag_owner->ptl_send_progress(