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".
Change-Id: I50f55fd532901147cfda1a5f40ef949bf3270401
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>
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);