From 02ee95731136e55323dd5564cbab82a0a4515baa Mon Sep 17 00:00:00 2001
From: Utz-Uwe Haus <uhaus@hpe.com>
Date: Fri, 19 Aug 2022 15:52:25 +0300
Subject: [PATCH] Ensure mstro_init/finalize can be called multile times

The pc thread stop indicator needs to be reset for this to work.

Closes #203
---
 maestro/ofi.c                  | 7 +++----
 tests/check_pm_collision.sh.in | 2 +-
 tests/colliding_client.c       | 2 ++
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/maestro/ofi.c b/maestro/ofi.c
index a4486034..da7320cf 100644
--- a/maestro/ofi.c
+++ b/maestro/ofi.c
@@ -1922,10 +1922,6 @@ mstro_ofi_init(void)
     
     const struct fi_info* fi = g_endpoints->eps[g_endpoints->size].fi;
     
-    if((fi->domain_attr->mr_mode & FI_MR_ENDPOINT)) {
-      WARN("FIXME: missing support for FI_MR_ENDPOINT domains in some regions -- FIXME\n");
-    }
-    
     uint64_t requested_key = fi->domain_attr->mr_mode & FI_MR_PROV_KEY ? 0 : mstro_memory_new_key();
     int ret = fi_mr_reg(g_endpoints->eps[g_endpoints->size].domain,
                         &g_pm_component_descriptor, sizeof(g_pm_component_descriptor),
@@ -3419,6 +3415,8 @@ mstro_pc_thread(void *closure)
   mio_thread_fini(&mthread);
 #endif
 
+  g_pc_stop=false; /* in case someone does a second round of mstro_init */
+
   return NULL;
 }
 
@@ -3460,6 +3458,7 @@ mstro_pc_terminate(void)
       /* simulate detach (local only) */
       atomic_store(&g_mstro_pm_attached, false);
       g_pool_app_id = MSTRO_APP_ID_INVALID;
+      DEBUG("Simulated detach (no PM)\n");
       break;
     }
     default:
diff --git a/tests/check_pm_collision.sh.in b/tests/check_pm_collision.sh.in
index f926eef1..71fd136c 100644
--- a/tests/check_pm_collision.sh.in
+++ b/tests/check_pm_collision.sh.in
@@ -88,7 +88,7 @@ export MSTRO_POOL_MANAGER_INFO
 
 #make sure client 1 started already
 
-sleep 0.5
+sleep 1
 
 # start client 2
 (env ${CLIENT_CMD}_2) || exit 99  &
diff --git a/tests/colliding_client.c b/tests/colliding_client.c
index 473bd040..1fba3802 100644
--- a/tests/colliding_client.c
+++ b/tests/colliding_client.c
@@ -70,6 +70,8 @@ CHEAT_TEST(colliding_client,
            }
            else{
              cheat_assert(MSTRO_NOT_TWICE == mstro_init("test","client",1));
+	     cheat_yield();
              cheat_assert(MSTRO_FAIL == mstro_finalize());
+	     cheat_yield();
            }
            )
-- 
GitLab