zsmartsystems / com.zsmartsystems.zigbee

ZigBee Cluster Library Java framework supporting multiple dongles
Eclipse Public License 1.0
142 stars 88 forks source link

ConcurrentModificationException in ZigBeeTransactionManager.sendNextTransaction #1290

Closed TomTravaglino closed 2 years ago

TomTravaglino commented 2 years ago

This Exception is thrown when iterating over outstandingQueues

java.util.ConcurrentModificationException: null
at java.util.ArrayList$Itr.checkForComodification(checkForComodification:911)
at java.util.ArrayList$Itr.next(next:861)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransactionManager.sendNextTransaction(sendNextTransaction:661)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransactionManager.transactionComplete(transactionComplete:540)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransaction.cancel(cancel:357)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransactionQueue.transactionComplete(transactionComplete:321)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransactionManager.transactionComplete(transactionComplete:526)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransaction.failTransaction(failTransaction:446)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransaction.transactionStatusReceived(transactionStatusReceived:491)
at com.zsmartsystems.zigbee.transaction.ZigBeeTransactionManager$3.run(run:579)
at java.util.concurrent.ThreadPoolExecutor.runWorker(runWorker:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(run:624)
at java.lang.Thread.run(run:748)utor$Worker.run(run:624)
at java.lang.Thread.run(run:748)

outstandingQueues is a simple ArrayList. Changing it to a CopyOnWriteArrayList should fix it. WDYT?

TomTravaglino commented 2 years ago

@cdjackson I created a PR for this.

cdjackson commented 2 years ago

Thanks @TomTravaglino . Sorry - I missed this yesterday but I think this is fine.