 	if (x >= MAXMSG)
-		return -1;
-	if (strcmp(sfn, dfn)) {
+		res = -1;
+	if (res == 0 && strcmp(sfn, dfn)) {
 		COPY(dir, msg, ddir, x, sfn, dfn);
 	}
-	return 0;
+	ast_mutex_unlock(&filealloclock);
+	return res;