diff --git a/src/service/sending/mod.rs b/src/service/sending/mod.rs
index b670b54fd009aee8aefce126c1920633b755ca59..fb9c34cd5289a27aa5178efa400ae5ba2c314680 100644
--- a/src/service/sending/mod.rs
+++ b/src/service/sending/mod.rs
@@ -350,7 +350,9 @@ async fn handler(&self) -> Result<()> {
 							vec![(event, key)],
 							&mut current_transaction_status,
 						) {
-							futures.push(handle_events(outgoing_kind, events));
+							if !events.is_empty() {
+								futures.push(handle_events(outgoing_kind, events));
+							}
 						}
 					}
 				}
@@ -598,6 +600,7 @@ pub fn select_edus_receipts(
 async fn handle_events(
 	kind: OutgoingKind, events: Vec<SendingEventType>,
 ) -> Result<OutgoingKind, (OutgoingKind, Error)> {
+	debug_assert!(!events.is_empty(), "sending empty transaction");
 	match kind {
 		OutgoingKind::Appservice(ref id) => handle_events_kind_appservice(&kind, id, events).await,
 		OutgoingKind::Push(ref userid, ref pushkey) => handle_events_kind_push(&kind, userid, pushkey, events).await,
@@ -638,6 +641,7 @@ async fn handle_events_kind_appservice(
 
 	let permit = services().sending.maximum_requests.acquire().await;
 
+	debug_assert!(!pdu_jsons.is_empty(), "sending empty transaction");
 	let response = match appservice::send_request(
 		services()
 			.appservice
@@ -792,6 +796,7 @@ async fn handle_events_kind_normal(
 
 	let permit = services().sending.maximum_requests.acquire().await;
 	let client = &services().globals.client.sender;
+	debug_assert!(pdu_jsons.len() + edu_jsons.len() > 0, "sending empty transaction");
 	let response = send::send_request(
 		client,
 		dest,