diff --git a/src/knot/ctl/commands.c b/src/knot/ctl/commands.c
index 3d0b30428749eb93228cf5881411e85a3788e334..bf2eaeead460e17ca49a63d1af93612781b6b029 100644
--- a/src/knot/ctl/commands.c
+++ b/src/knot/ctl/commands.c
@@ -863,6 +863,11 @@ static int zone_txn_begin(zone_t *zone, _unused_ ctl_args_t *args)
 		return KNOT_EAGAIN;
 	}
 
+	if (zone->events.running && zone->events.type >= 0 && zone->events.blocking[zone->events.type] != NULL) {
+		log_zone_warning(zone->name, "some blocking event running, try opening control transaction later");
+		return KNOT_EAGAIN;
+	}
+
 	zone->control_update = malloc(sizeof(zone_update_t));
 	if (zone->control_update == NULL) {
 		return KNOT_ENOMEM;