diff --git a/maestro/ofi.c b/maestro/ofi.c
index c61d1d902cf3056536f0813d7f6e6fb4d7da4ef4..91806e75f47d8aed3a72a62968154b6d051d1420 100644
--- a/maestro/ofi.c
+++ b/maestro/ofi.c
@@ -2715,7 +2715,10 @@ mstro_ofi__check_and_handle_cq(struct mstro_endpoint *ep,
     }
 
     if(re_post) {
-      ; /* fresh receive will be posted later, and slot messages have no completion watchers */
+       /* fresh receive has been posted earlier, and slot messages have no completion watchers */
+      DEBUG("slot message handled, cleaning up envelope and ctx\n");
+      mstro_msg_envelope_free(ctx->msg);
+      status = mstro_ofi__msg_context_destroy(ctx);
     } else {
       /* other recv */
       DEBUG("non-slot message, cleaning up\n");