Race condition beim Beenden behoben

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.
This commit is contained in:
ngb 2022-12-08 10:14:00 +01:00
parent b76d533739
commit 8d0bd2bc99
1 changed files with 11 additions and 6 deletions

View File

@ -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();
}
}
}