[mqtt] Avoid parallel streams with common thread pool to avoid deadlocks (#13621)

To mitigate issue https://github.com/openhab/openhab-core/issues/3125
(common thread pool exhaustion when combining parallel streams with
synchronization or locks)

Signed-off-by: Sami Salonen <ssalonen@gmail.com>
This commit is contained in:
Sami Salonen
2022-12-06 14:02:45 +02:00
committed by GitHub
parent be6bfb0f9b
commit 923c0f1db2
4 changed files with 12 additions and 9 deletions

View File

@@ -105,8 +105,11 @@ public abstract class AbstractMQTTThingHandler extends BaseThingHandler
* @return A future that completes normal on success and exceptionally on any errors.
*/
protected CompletableFuture<@Nullable Void> start(MqttBrokerConnection connection) {
return availabilityStates.values().parallelStream().map(cChannel -> cChannel.start(connection, scheduler, 0))
.collect(FutureCollector.allOf());
return availabilityStates.values().stream().map(cChannel -> {
final CompletableFuture<@Nullable Void> fut = cChannel == null ? CompletableFuture.completedFuture(null)
: cChannel.start(connection, scheduler, 0);
return fut;
}).collect(FutureCollector.allOf());
}
/**