diff --git a/src/search.c b/src/search.c
index 24d6004edf38a32151b41a5492f4450b1b1c1125..910b3daa4f306c8ed2461f96c6ab1acda8a151e3 100644
--- a/src/search.c
+++ b/src/search.c
@@ -292,10 +292,14 @@ int findnextstr(
 
 	    lastkbcheck = time(NULL);
 
-	    if (input && func_from_key(&input) == do_cancel) {
-		statusbar(_("Cancelled"));
-		disable_nodelay();
-		return -2;
+	    /* Consume all waiting keystrokes until a Cancel. */
+	    while (input) {
+		if (func_from_key(&input) == do_cancel) {
+		    statusbar(_("Cancelled"));
+		    disable_nodelay();
+		    return -2;
+		}
+		input = parse_kbinput(NULL);
 	    }
 
 	    if (++feedback > 0)