[bisq-network/bisq] Dao fix reorg issues (#2056)
Manfred Karrer
notifications at github.com
Wed Dec 5 16:52:15 UTC 2018
ManfredKarrer commented on this pull request.
> + }
+
+ try {
+ Block block = blockParser.parseBlock(rawBlock);
+
+ if (pendingBlocks.contains(rawBlock))
+ pendingBlocks.remove(rawBlock);
+
+ // After parsing we check if we have pending blocks we might have received earlier but which have been
+ // not connecting from the latest height we had. The list is sorted by height
+ if (!pendingBlocks.isEmpty()) {
+ // To avoid ConcurrentModificationException we copy the list. It might be altered in the method call
+ ArrayList<RawBlock> tempPendingBlocks = new ArrayList<>(pendingBlocks);
+ for (RawBlock tempPendingBlock : tempPendingBlocks) {
+ try {
+ doParseBlock(tempPendingBlock);
Yes right I think that is wrong. It would iterate multiple times with lists which have been already applied. E.g. if you have 5 items and first recursive call copies the list then removes the current block from the source list and then copy the list again and start another loop with 4 itmes. Once that recursion is done the parent recursion would still iterate the remaining elements but those have been already processed. So either we add a check there if the block is still in the source list or we dont use a loop but only call with the first element (list is sorted) and so we avoid the remaining iterations from the current loop.
What do you think?
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/bisq-network/bisq/pull/2056#discussion_r239149141
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bisq.network/pipermail/bisq-github/attachments/20181205/0cd9a978/attachment.html>
More information about the bisq-github
mailing list