diff --git a/fdbclient/MultiVersionTransaction.actor.cpp b/fdbclient/MultiVersionTransaction.actor.cpp index b5685932ab..daad55dd77 100644 --- a/fdbclient/MultiVersionTransaction.actor.cpp +++ b/fdbclient/MultiVersionTransaction.actor.cpp @@ -1522,14 +1522,24 @@ THREAD_FUNC cancel(void *arg) { ACTOR Future checkUndestroyedFutures(std::vector*> undestroyed) { state int fNum; + state ThreadSingleAssignmentVar* f; + state double start = now(); + for(fNum = 0; fNum < undestroyed.size(); ++fNum) { - state ThreadSingleAssignmentVar* f = undestroyed[fNum]; - state double start = now(); - while(!f->isReady()) { - ASSERT(now() < start+60); - Void _ = wait(delay(5.0)); + f = undestroyed[fNum]; + + while(!f->isReady() && start+5 >= now()) { + Void _ = wait(delay(1.0)); } + ASSERT(f->isReady()); + } + + Void _ = wait(delay(1.0)); + + for(fNum = 0; fNum < undestroyed.size(); ++fNum) { + f = undestroyed[fNum]; + ASSERT(f->debugGetReferenceCount() == 1); ASSERT(f->isReady()); @@ -1545,7 +1555,7 @@ THREAD_FUNC runSingleAssignmentVarTest(void *arg) { volatile bool *done = (volatile bool*)arg; try { - for(int i = 0; i < 100; ++i) { + for(int i = 0; i < 25; ++i) { FutureInfo f = createVarOnMainThread(false); FutureInfo tf = T::createThreadFuture(f); tf.validate(); @@ -1553,7 +1563,7 @@ THREAD_FUNC runSingleAssignmentVarTest(void *arg) { tf.future.extractPtr(); // leaks } - for(int numRuns = 0; numRuns < 100; ++numRuns) { + for(int numRuns = 0; numRuns < 25; ++numRuns) { std::vector*> undestroyed; std::vector threads; for(int i = 0; i < 10; ++i) {