ccavanaugh / jgnash

jGnash Personal Finance
http://ccavanaugh.github.io/jgnash/
Other
139 stars 80 forks source link

ConcurrentModificationException creating budget #64

Closed kfops closed 5 years ago

kfops commented 5 years ago

Expected Behavior

After choosing to have the Liabilities section of the budget shown (in the budget properties) this section would appear.

Actual Behavior

jGnash throws a ConcurrentModificationException after the "show liabilities" is enabled in the budget properties dialogue. java.util.ConcurrentModificationException: java.util.ConcurrentModificationException at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488) at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:587) at java.base/java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:668) at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:726) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:919) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:511) at jgnash.ui.budget.BudgetPanel.getSparkLineIcon(BudgetPanel.java:637) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1494) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952) at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926) at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:316) at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:747) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:283) at java.base/java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:395) at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:725) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:919) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:511) at jgnash.ui.budget.BudgetOverviewPanel.lambda$updateSparkLines$3(BudgetOverviewPanel.java:183) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.base/java.lang.Thread.run(Thread.java:844) Caused by: java.util.ConcurrentModificationException at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1500) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952) at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926) at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:316) at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:747) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:283) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1603) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:175)

Steps to Reproduce the Problem

  1. Choose the "budgeting" view
  2. Enable "liability accounts" under the budget preference
  3. Choose okay.
  4. Exception is thrown
  5. This can be reproduced by changing the "Period" under preferences.

Specifications

ccavanaugh commented 5 years ago

I've not been able to reproduce the issue on my system. I have made a change that may correct it, but time will tell. I suspect it is a race issue tied to the number of available cores on a system.