From 8d0bd2bc99bdb0dd531c02934f2871ce4e7696a5 Mon Sep 17 00:00:00 2001 From: "J. Neugebauer" Date: Thu, 8 Dec 2022 10:14:00 +0100 Subject: [PATCH] Race condition beim Beenden behoben MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Beenden der Zeichenmaschine und vor allem das Schließen des Zeichenfesnters wird im Swing Thread ausgeführt. Es konnte passieren, dass der Zeichenthread noch einen draw-Aufruf verarbeitete, während die Zeichenleinwand schon disposed wurde. Dann konnte eine NullPointerException auftreten. Der Zeichenthread hat nun 500 ms Zeit, von alleine zu beenden, bevor die ZM vollständig beendet wird. --- .../java/schule/ngb/zm/Zeichenmaschine.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/schule/ngb/zm/Zeichenmaschine.java b/src/main/java/schule/ngb/zm/Zeichenmaschine.java index 02b3aeb..3681968 100644 --- a/src/main/java/schule/ngb/zm/Zeichenmaschine.java +++ b/src/main/java/schule/ngb/zm/Zeichenmaschine.java @@ -1447,14 +1447,19 @@ public class Zeichenmaschine extends Constants { Thread.yield(); } updateThreadExecutor.shutdownNow(); + try { + updateThreadExecutor.awaitTermination(500, TimeUnit.MILLISECONDS); + } catch( InterruptedException ex ) { - // Cleanup - shutdown(); - cleanup(); - state = Options.AppState.TERMINATED; + } finally { + // Cleanup + shutdown(); + cleanup(); + state = Options.AppState.TERMINATED; - if( quitAfterShutdown ) { - quit(); + if( quitAfterShutdown ) { + quit(); + } } }