diff --git a/package/network/utils/iwcap/src/iwcap.c b/package/network/utils/iwcap/src/iwcap.c
index 6bf25c57ddfe7d8becfb3c6090888f7688675459..bc69550ef38dc675bdfc5e8a7790223c8c42e327 100644
--- a/package/network/utils/iwcap/src/iwcap.c
+++ b/package/network/utils/iwcap/src/iwcap.c
@@ -490,19 +490,7 @@ int main(int argc, char **argv)
 	/* capture loop */
 	while (1)
 	{
-		if (run_stop)
-		{
-			msg("Shutting down ...\n");
-
-			if (promisc)
-				set_promisc(0);
-
-			if (ring)
-				ringbuf_free(ring);
-
-			return 0;
-		}
-		else if (run_dump)
+		if (run_dump)
 		{
 			msg("Dumping ring to %s ...\n", output);
 
@@ -535,6 +523,18 @@ int main(int argc, char **argv)
 
 			run_dump = 0;
 		}
+		if (run_stop)
+		{
+			msg("Shutting down ...\n");
+
+			if (promisc)
+				set_promisc(0);
+
+			if (ring)
+				ringbuf_free(ring);
+
+			return 0;
+		}
 
 		pktlen = recvfrom(capture_sock, pktbuf, sizeof(pktbuf), 0, NULL, 0);
 		frames_captured++;