test/interrupt: account for race with callback
authorAaron Conole <aconole@redhat.com>
Thu, 8 Aug 2019 17:38:35 +0000 (13:38 -0400)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 13 Sep 2019 15:00:19 +0000 (17:00 +0200)
Because the eal interrupt framework can race when invoking the callback
and a separate unregister call, the test needs to accommodate the chance
that the two collide.  Do this by checking the return value of unregister
against the race-condition flag (EAGAIN).

Fixes: f1a6c22424ce ("app/test: update interrupts test")
Cc: stable@dpdk.org
Signed-off-by: Aaron Conole <aconole@redhat.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
app/test/test_interrupts.c

index d8c2d81..233b14a 100644 (file)
@@ -370,9 +370,13 @@ test_interrupt_full_path_check(enum test_interrupt_handle_type intr_type)
                rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL);
 
        rte_delay_ms(TEST_INTERRUPT_CHECK_INTERVAL);
-       if (rte_intr_callback_unregister(&test_intr_handle,
-                       test_interrupt_callback, &test_intr_handle) < 0)
-               return -1;
+       while ((count =
+               rte_intr_callback_unregister(&test_intr_handle,
+                                            test_interrupt_callback,
+                                            &test_intr_handle)) < 0) {
+               if (count != -EAGAIN)
+                       return -1;
+       }
 
        if (flag == 0) {
                printf("callback has not been called\n");