From b9ec9bb6a1248cf8d276390fb6dca72081593f13 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 23 Apr 2016 10:13:18 +0200 Subject: [PATCH] don't lose submitted transactions --- .../openapi/application/TransactionGuardImpl.java | 12 +++--------- .../intellij/application/TransactionTest.groovy | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java index 184ed367e9bb..237df5160ca3 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/TransactionGuardImpl.java @@ -60,6 +60,7 @@ public class TransactionGuardImpl extends TransactionGuard { public void finish() { Queue queue = getQueue(prevTransaction); queue.addAll(myCurrentTransaction.myQueue); + myCurrentTransaction.myQueue = queue; if (!queue.isEmpty()) { pollQueueLater(); } @@ -72,14 +73,7 @@ public class TransactionGuardImpl extends TransactionGuard { @NotNull private Queue getQueue(@Nullable TransactionIdImpl transaction) { - if (transaction == null) { - return myQueue; - } - if (myCurrentTransaction != null && transaction.myStartCounter > myCurrentTransaction.myStartCounter) { - // transaction is finished already, it makes no sense to add to its queue - return myCurrentTransaction.myQueue; - } - return transaction.myQueue; + return transaction == null ? myQueue : transaction.myQueue; } private void pollQueueLater() { @@ -304,7 +298,7 @@ public class TransactionGuardImpl extends TransactionGuard { private static class TransactionIdImpl implements TransactionId { private static final AtomicLong ourTransactionCounter = new AtomicLong(); final long myStartCounter = ourTransactionCounter.getAndIncrement(); - final Queue myQueue = new LinkedBlockingQueue(); + Queue myQueue = new LinkedBlockingQueue(); @Override public String toString() { diff --git a/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy b/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy index b810c6eacc27..1b68f58338bd 100644 --- a/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy +++ b/platform/platform-tests/testSrc/com/intellij/application/TransactionTest.groovy @@ -216,4 +216,18 @@ class TransactionTest extends LightPlatformTestCase { assert log == ['1', '2', '3', '4', '5'] } + public void "test don't add transaction to outdated queue"() { + TransactionGuard.submitTransaction testRootDisposable, { + log << '1' + guard.submitTransactionLater testRootDisposable, { log << '3' } + log << '2' + } + TransactionGuard.submitTransaction testRootDisposable, { + UIUtil.dispatchAllInvocationEvents() + assert log == ['1', '2'] + } + UIUtil.dispatchAllInvocationEvents() + assert log == ['1', '2', '3'] + } + }