@@ -567,6 +567,11 @@ int ompi_osc_ucx_compare_and_swap(const void *origin_addr, const void *compare_a
567
567
return ret ;
568
568
}
569
569
570
+ ret = start_atomicity (module , ep , target );
571
+ if (ret != OMPI_SUCCESS ) {
572
+ return ret ;
573
+ }
574
+
570
575
ompi_datatype_type_size (dt , & dt_bytes );
571
576
memcpy (result_addr , origin_addr , dt_bytes );
572
577
req = ucp_atomic_fetch_nb (ep , UCP_ATOMIC_FETCH_OP_CSWAP , * (uint64_t * )compare_addr ,
@@ -575,7 +580,12 @@ int ompi_osc_ucx_compare_and_swap(const void *origin_addr, const void *compare_a
575
580
ucp_request_release (req );
576
581
}
577
582
578
- return incr_and_check_ops_num (module , target , ep );
583
+ ret = incr_and_check_ops_num (module , target , ep );
584
+ if (ret != OMPI_SUCCESS ) {
585
+ return ret ;
586
+ }
587
+
588
+ return end_atomicity (module , ep , target );
579
589
}
580
590
581
591
int ompi_osc_ucx_fetch_and_op (const void * origin_addr , void * result_addr ,
@@ -600,6 +610,11 @@ int ompi_osc_ucx_fetch_and_op(const void *origin_addr, void *result_addr,
600
610
size_t dt_bytes ;
601
611
ompi_osc_ucx_internal_request_t * req = NULL ;
602
612
613
+ ret = start_atomicity (module , ep , target );
614
+ if (ret != OMPI_SUCCESS ) {
615
+ return ret ;
616
+ }
617
+
603
618
ompi_datatype_type_size (dt , & dt_bytes );
604
619
605
620
if (op == & ompi_mpi_op_replace .op ) {
@@ -617,7 +632,12 @@ int ompi_osc_ucx_fetch_and_op(const void *origin_addr, void *result_addr,
617
632
ucp_request_release (req );
618
633
}
619
634
620
- return incr_and_check_ops_num (module , target , ep );
635
+ ret = incr_and_check_ops_num (module , target , ep );
636
+ if (ret != OMPI_SUCCESS ) {
637
+ return ret ;
638
+ }
639
+
640
+ return end_atomicity (module , ep , target );
621
641
} else {
622
642
return ompi_osc_ucx_get_accumulate (origin_addr , 1 , dt , result_addr , 1 , dt ,
623
643
target , target_disp , 1 , dt , op , win );
0 commit comments