diff --git a/lib/c/labcomm_decoder.c b/lib/c/labcomm_decoder.c
index bdf5f43c114a17f406ad5f874974a82cb554ae1d..7d657d7f0a103dd0f47ac9b870c459dbea390054 100644
--- a/lib/c/labcomm_decoder.c
+++ b/lib/c/labcomm_decoder.c
@@ -259,11 +259,13 @@ static void call_handler(void *value, void *context)
 {
   struct call_handler_context *wrap = context;
 
-  labcomm_reader_start(wrap->reader, wrap->reader->action_context,
-		       wrap->local_index, wrap->remote_index, wrap->signature,
-		       value);
-  wrap->handler(value, wrap->context);
-  labcomm_reader_end(wrap->reader, wrap->reader->action_context);
+  if (wrap->reader->error >= 0) {
+    labcomm_reader_start(wrap->reader, wrap->reader->action_context,
+			 wrap->local_index, wrap->remote_index, wrap->signature,
+			 value);
+    wrap->handler(value, wrap->context);
+    labcomm_reader_end(wrap->reader, wrap->reader->action_context);
+  }
 }
 
 static void reader_alloc(struct labcomm_decoder *d)