diff --git a/transport/rdma.c b/transport/rdma.c
index 1c53f9ec4a15a187ab95b632343dcfcd135acf96..2c501c5652e0dba3ff0772b6512f0d3ec72f986c 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;