Verified Commit c7c449e4 authored by Tommaso Tocci's avatar Tommaso Tocci
Browse files

tmp patch: fix mercury busy-waiting issue

temporary patch to workaround this issue: https://github.com/mercury-hpc/mercury/issues/229
parent b0485c4d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -282,6 +282,8 @@ if [ "$NA_LAYER" == "cci" ] || [ "$NA_LAYER" == "all" ]; then
    echo "########## Applying cci addr lookup error handling patch"
    git apply ${PATCH_DIR}/mercury_cci_verbs_lookup.patch
fi
echo "########## Applying mercury deregister socket patch"
git apply ${PATCH_DIR}/mercury_deregister_sock.patch
cd ${CURR}/build
$CMAKE -DMERCURY_USE_SELF_FORWARD:BOOL=ON -DMERCURY_USE_CHECKSUMS:BOOL=OFF -DBUILD_TESTING:BOOL=ON \
-DMERCURY_USE_BOOST_PP:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_INSTALL_PREFIX=${INSTALL} \
+42 −0
Original line number Diff line number Diff line
From fd34de9e4a8b91202f0afb9aa222c06bc9761283 Mon Sep 17 00:00:00 2001
From: Tommaso Tocci <tommaso@tocci.pro>
Date: Mon, 2 Jul 2018 11:54:10 +0200
Subject: [PATCH] sm: clear client disconnection event on socket

---
 src/na/na_sm.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/na/na_sm.c b/src/na/na_sm.c
index d96f1b6..01e4110 100644
--- a/src/na/na_sm.c
+++ b/src/na/na_sm.c
@@ -2134,6 +2134,16 @@ na_sm_progress_sock(na_class_t *na_class, struct na_sm_addr *poll_addr,
             *progressed = NA_TRUE;
         }
         break;
+        case NA_SM_SOCK_DONE: {
+            *progressed = NA_FALSE;
+        	ret = na_sm_poll_deregister(na_class, NA_SM_SOCK, poll_addr);
+            if (ret != NA_SUCCESS) {
+                NA_LOG_ERROR("Could not deregister socket from poll set");
+                ret = NA_PROTOCOL_ERROR;
+                goto done;
+            }
+        }
+        break;
         default:
             /* TODO Silently ignore, no progress */
             *progressed = NA_FALSE;
@@ -2860,7 +2870,7 @@ na_sm_addr_free(na_class_t *na_class, na_addr_t addr)
         ret = na_sm_poll_deregister(na_class, NA_SM_SOCK, na_sm_addr);
         if (ret != NA_SUCCESS) {
             NA_LOG_ERROR("Could not delete sock from poll set");
-            goto done;
+            //goto done;
         }
 
         /* Remove addr from poll addr queue */
-- 
2.18.0