From 8d480c79314960a044ab85ec29dc1e4e9bb43e65 Mon Sep 17 00:00:00 2001 From: Cory Perry Date: Fri, 31 Oct 2025 13:36:09 -0700 Subject: [PATCH] Remove abort path from a failed rdma registration in gasnet --- src/realm/gasnetex/gasnetex_internal.cc | 7 +++++-- .../gasnetex_wrapper/gasnetex_wrapper.cc | 18 +++++++++--------- .../gasnetex_wrapper/gasnetex_wrapper.h | 4 ++-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/realm/gasnetex/gasnetex_internal.cc b/src/realm/gasnetex/gasnetex_internal.cc index 7060d3e4ec4..aa0226b9654 100644 --- a/src/realm/gasnetex/gasnetex_internal.cc +++ b/src/realm/gasnetex/gasnetex_internal.cc @@ -3375,14 +3375,17 @@ namespace Realm { } } + if(gex_wrapper_handle.gex_ep_bind_segment(ep, segment, 0 /*flags*/) != 0) { + // TODO: destroy the segment and ep we created? + return false; + } + assert(ep_index == eps.size()); eps.push_back(ep); assert(ep_index == xmitsrcs.size()); xmitsrcs.push_back(new XmitSrc(this, ep_index)); - gex_wrapper_handle.gex_ep_bind_segment(ep, segment, 0 /*flags*/); - uintptr_t base_as_uint = reinterpret_cast(base); segments_by_addr.push_back( {base_as_uint, base_as_uint + size, ep_index, segment, memtype, memextra}); diff --git a/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.cc b/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.cc index eec3eaf7fcc..62a28f7fe0f 100644 --- a/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.cc +++ b/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.cc @@ -138,19 +138,19 @@ namespace Realm { static_cast(kind), flags); } - static void gex_ep_bind_segment(gex_ep_opaque_t ep, gex_segment_opaque_t segment, - gex_flags_t flags) + static int gex_ep_bind_segment(gex_ep_opaque_t ep, gex_segment_opaque_t segment, + gex_flags_t flags) { - gex_System_SetVerboseErrors(1); - gex_EP_BindSegment(static_cast(ep), static_cast(segment), - flags); + int rc = gex_EP_BindSegment(static_cast(ep), + static_cast(segment), flags); + if(rc != GASNET_OK) { + return rc; + } if(gex_EP_QuerySegment(static_cast(ep)) != static_cast(segment)) { - fprintf(stderr, "failed to bind segment"); - fflush(stderr); - abort(); + return -1; } - gex_System_SetVerboseErrors(0); + return 0; } static void gex_query_shared_peers(gex_rank_t *num_shared_ranks, diff --git a/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.h b/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.h index c03e636f389..51bac221a99 100644 --- a/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.h +++ b/src/realm/gasnetex/gasnetex_wrapper/gasnetex_wrapper.h @@ -122,8 +122,8 @@ typedef struct gex_wrapper_handle_s { gex_client_opaque_t client, gex_addr_opaque_t address, uintptr_t length, gex_mk_opaque_t kind, gex_flags_t flags); - void (*gex_ep_bind_segment)(gex_ep_opaque_t ep, gex_segment_opaque_t segment, - gex_flags_t flags); + int (*gex_ep_bind_segment)(gex_ep_opaque_t ep, gex_segment_opaque_t segment, + gex_flags_t flags); void (*gex_query_shared_peers)(gex_rank_t *num_shared_ranks, gex_rank_t **shared_ranks);