From c56b4fc5115f635c05f5347f355e605eac0f8de1 Mon Sep 17 00:00:00 2001
From: Utz-Uwe Haus <uhaus@hpe.com>
Date: Tue, 7 Sep 2021 06:49:48 +0000
Subject: [PATCH] Add missing mreg table locks in RDMA transport

Closes #69 on JSC issue tracker
---
 transport/rdma.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/transport/rdma.c b/transport/rdma.c
index 1c53f9ec..2c501c56 100644
--- a/transport/rdma.c
+++ b/transport/rdma.c
@@ -183,6 +183,12 @@ mstro_transport_rdma_src_execute(mstro_cdo src, Mstro__Pool__TransferTicket* tic
     return MSTRO_FAIL;
   } 
 
+  int err = pthread_mutex_lock(&g_mstro_transport_mreg_table_lock);
+  if (err) {
+    ERR("Couldn't lock mutex on mreg table\n");
+	return MSTRO_FAIL;
+  }
+
   status = mstro_transport_rdma__mreg_entry_find__locked(e->ep, cdo_id_p, &regentry);
 
   if (regentry) {
@@ -297,6 +303,13 @@ mstro_transport_rdma_src_execute_bh(Mstro__Pool__TransferCompleted *tc)
     return MSTRO_FAIL;
   } 
 
+
+  int err = pthread_mutex_lock(&g_mstro_transport_mreg_table_lock);
+  if (err) {
+    ERR("Couldn't lock mutex on mreg table\n");
+	return MSTRO_FAIL;
+  }
+
   status = mstro_transport_rdma__mreg_entry_find__locked(e->ep, &cdoid, &regentry);
 
   if (!regentry) {
@@ -313,8 +326,8 @@ mstro_transport_rdma_src_execute_bh(Mstro__Pool__TransferCompleted *tc)
 
   DEBUG ("Unregistering memory region (start: %p) used for RDMA\n", regentry->addr);
 
-  int err = fi_close((struct fid*)regentry->mr_reg);
-  if (err) {
+  err = fi_close((struct fid*)regentry->mr_reg);
+  if(err) {
     ERR("Couldn't unregister memory region for RDMA transport (err: %d)\n", err);
     status=MSTRO_FAIL;
     goto BAILOUT_UNLOCK;
-- 
GitLab