diff --git a/src/logic/slbt_exec_compile.c b/src/logic/slbt_exec_compile.c
index dca6e1e..7a934ab 100644
--- a/src/logic/slbt_exec_compile.c
+++ b/src/logic/slbt_exec_compile.c
@@ -155,8 +155,9 @@ int  slbt_exec_compile(
 	/* .libs directory */
 	if (cctx->drvflags & SLBT_DRIVER_SHARED)
 		if (slbt_mkdir(dctx,ectx->ldirname)) {
+			ret = SLBT_SYSTEM_ERROR(dctx,ectx->ldirname);
 			slbt_free_exec_ctx(actx);
-			return SLBT_SYSTEM_ERROR(dctx,ectx->ldirname);
+			return ret;
 		}
 
 	/* compile mode */
diff --git a/src/logic/slbt_exec_link.c b/src/logic/slbt_exec_link.c
index 2ffb6ad..5e42861 100644
--- a/src/logic/slbt_exec_link.c
+++ b/src/logic/slbt_exec_link.c
@@ -1765,8 +1765,9 @@ int slbt_exec_link(
 
 	/* .libs directory */
 	if (slbt_mkdir(dctx,ectx->ldirname)) {
+		ret = SLBT_SYSTEM_ERROR(dctx,ectx->ldirname);
 		slbt_free_exec_ctx(actx);
-		return SLBT_SYSTEM_ERROR(dctx,ectx->ldirname);
+		return ret;
 	}
 
 	/* non-pic libfoo.a */