]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Adjust rx-event test to exercise cancel/fire race
authorBenjamin Kaduk <kaduk@mit.edu>
Thu, 5 Oct 2017 04:03:44 +0000 (23:03 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Tue, 28 Nov 2017 03:19:57 +0000 (22:19 -0500)
We currently do not properly handle the case where a thread runs
rxevent_Cancel() in parallel with the event-handler thread attempting
to fire that event, but the test suite only picked up on this issue
in a handful of the Debian automated builds (somewhat less-resourced
ones, perhaps).

Modify the event scheduling algorithm in the test so as to create a
larger chunk of events scheduled to fire "right away" and thereby
exercise the race condition more often when we proceed to cancel
a quarter of events "right away".

Reviewed-on: https://gerrit.openafs.org/12755
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
(cherry picked from commit bdb509fb1d8e0fdca05dffecdbcbf60a95ea502e)

Change-Id: I27cebed3c2c3daff10b8d3f5f6f949e667791a72
Reviewed-on: https://gerrit.openafs.org/12774
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
tests/rx/event-t.c

index 2812fa5bd5ec67b27a6588169d9d5998855ba083..c990246540a8ccaf32566243af8e69c473d83f23 100644 (file)
@@ -124,10 +124,14 @@ main(void)
     ok(pthread_create(&handler, NULL, eventHandler, NULL) == 0,
        "Created handler thread");
 
-    /* Add 1000 random events to fire over the next 3 seconds */
+    /* Add 1000 random events to fire over the next 3 seconds, but front-loaded
+     * a bit so that we can exercise the cancel/fire race path. */
 
     for (counter = 0; counter < NUMEVENTS; counter++) {
-        when = random() % 3000;
+        when = random() % 4000;
+       /* Put 1/4 of events "right away" so we cancel them as they fire */
+       if (when >= 3000)
+           when = random() % 5;
        clock_GetTime(&now);
        eventTime = now;
        clock_Addmsec(&eventTime, when);