From 64af691d5657a4abb4bed1fa87311e850dd6aefe Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Tue, 21 Jul 2020 11:02:22 +0200 Subject: [PATCH 1/6] make downloadtask to be run as a daemon thread --- .../controllers/subcontrollers/DownloadSrcController.java | 4 +++- src/main/java/ecorp/easy/installer/threads/DownloadTask.java | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java index 698f80e0..b776fc6c 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java @@ -107,7 +107,9 @@ public class DownloadSrcController extends AbstractSubController { this.preparationProgressBar.progressProperty().bind(currentTask.progressProperty()); this.progressLabel.textProperty().bind(currentTask.messageProperty()); this.preparationProgressBar.getStyleClass().remove("errorBar"); - new Thread(currentTask).start(); + Thread thread = new Thread(currentTask); + thread.setDaemon(true); + thread.start(); return true; } return false; diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index 15868620..66f35f13 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -139,6 +139,7 @@ public class DownloadTask extends Task{ ){ TimeOutRunnable timeoutRunnable = new TimeOutRunnable(); Thread timeoutThread = new Thread(timeoutRunnable); + timeoutThread.setDaemon(true); timeoutThread.start(); long downloadAmount =0; @@ -164,8 +165,8 @@ public class DownloadTask extends Task{ } } //end of download, stop the timeout thread - timeoutRunnable.stop(); - timeoutThread.join(1000); + //timeoutRunnable.stop(); + //timeoutThread.join(1000); } //If cancelled or not download, delete the partially downloaded file -- GitLab From 8fdea1e5a32551692049ca8992e395dbbc2a4609 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Tue, 21 Jul 2020 11:16:16 +0200 Subject: [PATCH 2/6] set DeviceDetectionTask a daemonThread --- .../controllers/subcontrollers/DeviceDetectedController.java | 4 +++- .../controllers/subcontrollers/DownloadSrcController.java | 1 - src/main/java/ecorp/easy/installer/threads/DownloadTask.java | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java index 5c9a19f3..0dcbccd2 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DeviceDetectedController.java @@ -92,7 +92,9 @@ public class DeviceDetectedController extends AbstractSubController{ } }); try{ - new Thread(detectorTask).start(); + Thread thread = new Thread(detectorTask); + thread.setDaemon(true); + thread.start(); } catch(Exception e){ logger.error("startDetection(), error: {}", e.toString()); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java index b776fc6c..bf17fea5 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/DownloadSrcController.java @@ -121,7 +121,6 @@ public class DownloadSrcController extends AbstractSubController { progressLabel.setText(i18n.getString("download_lbl_complete")); progressTitle.setVisible(false); parentController.disableNextButton(false); - parentController.setThread(null); } diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index 66f35f13..ad90e1fb 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -164,6 +164,7 @@ public class DownloadTask extends Task{ downloaded = (downloadAmount == fileSize); } } + //If i'm not wrong, the below code is not required anymore. //end of download, stop the timeout thread //timeoutRunnable.stop(); //timeoutThread.join(1000); -- GitLab From cecc660407ed6531eedf184f9a3421f95c4ee588 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Tue, 21 Jul 2020 13:23:26 +0200 Subject: [PATCH 3/6] uncomment timeoutRunnable stop. Put FlashThread as daemon thread --- .../installer/controllers/MainWindowController.java | 8 -------- .../subcontrollers/FlashSceneController.java | 7 ++++--- .../ecorp/easy/installer/threads/DownloadTask.java | 2 +- .../ecorp/easy/installer/threads/FlashThread.java | 13 +------------ 4 files changed, 6 insertions(+), 24 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java index 9f0eca9c..4bb5739f 100644 --- a/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java +++ b/src/main/java/ecorp/easy/installer/controllers/MainWindowController.java @@ -20,7 +20,6 @@ import ecorp.easy.installer.AppConstants; import ecorp.easy.installer.controllers.subcontrollers.AbstractSubController; import ecorp.easy.installer.EasyInstaller; import ecorp.easy.installer.models.Device; -import ecorp.easy.installer.threads.EasilyCancelable; import ecorp.easy.installer.threads.ThreadFactory; import java.io.IOException; @@ -56,7 +55,6 @@ public class MainWindowController implements Initializable { ResourceBundle i18n ;//internationalization String currentSubRootId =null; ThreadFactory factory = new ThreadFactory("/yaml/"); - EasilyCancelable thread; //will contain flashThread or preparation Thread Device device; //Object encapsulating data about the device to flash /** @@ -281,9 +279,6 @@ public class MainWindowController implements Initializable { public ThreadFactory getThreadFactory(){ return factory; } - public void setThread(EasilyCancelable thread){ - this.thread = thread; - } // Other methods /** * Method call when app is closing @@ -291,9 +286,6 @@ public class MainWindowController implements Initializable { */ public void onStop(){ logger.debug("onStop()"); - if(this.thread != null){ - thread.onCancelRequestRecieved(); - } } /** diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index bc10744a..bf106ae6 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -114,8 +114,7 @@ public class FlashSceneController extends AbstractSubSteppedController implement thread = parentController.getThreadFactory().buildFlashThread(this, pauseLock); if(thread!= null){ - parentController.setThread((EasilyCancelable) thread); - + thread.setDaemon(true); //@TODO find another way to get the step number as yaml file can contains step for issue. By example //if script got issue, then load script 45 if success load script 2. //Then the stepSize won't fit with the real step that the user must perform @@ -242,7 +241,9 @@ public class FlashSceneController extends AbstractSubSteppedController implement timer = new TimerTask(averageTime, this); loadStepProgressIndicator.setProgress(0.0); //Reset to prevent showing last value loadStepProgressIndicator.setVisible(true); - new Thread(timer).start(); + Thread timerThread = new Thread(timer); + timerThread.setDaemon(true); + timerThread.start(); } this.stepTitleIcon.setImage(null); this.instructionsFlow.setVisible(false); //put it invisible instead ? diff --git a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java index ad90e1fb..a98b2f1f 100644 --- a/src/main/java/ecorp/easy/installer/threads/DownloadTask.java +++ b/src/main/java/ecorp/easy/installer/threads/DownloadTask.java @@ -166,7 +166,7 @@ public class DownloadTask extends Task{ } //If i'm not wrong, the below code is not required anymore. //end of download, stop the timeout thread - //timeoutRunnable.stop(); + timeoutRunnable.stop(); //timeoutThread.join(1000); } diff --git a/src/main/java/ecorp/easy/installer/threads/FlashThread.java b/src/main/java/ecorp/easy/installer/threads/FlashThread.java index 7c546c69..705d3cdd 100644 --- a/src/main/java/ecorp/easy/installer/threads/FlashThread.java +++ b/src/main/java/ecorp/easy/installer/threads/FlashThread.java @@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory; * * @author Vincent Bourgmayer */ -public class FlashThread extends Thread implements EasilyCancelable{ +public class FlashThread extends Thread { final protected static char COMMON_PARAM_IDENTIFIER = '$';//allow to identify when an param of a step is to load from common parameter final protected static Pattern REGEX_FIND_PARAM = Pattern.compile("\\$\\{(.*?)\\}"); private final static Logger logger = LoggerFactory.getLogger(FlashThread.class); @@ -279,17 +279,6 @@ public class FlashThread extends Thread implements EasilyCancelable{ running = true; } - /** - * Call "cancel" from super - * @return this.cancelled - */ - @Override - public boolean onCancelRequestRecieved(){ - this.cancel(false); - return this.cancelled; - } - - @Override public void run(){ if(commands.isEmpty()) return; -- GitLab From e791558c3cb338c8753b3e18a8b8f75128b834dd Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Tue, 21 Jul 2020 13:25:34 +0200 Subject: [PATCH 4/6] remove EasilyCancelable interface --- .../subcontrollers/FlashSceneController.java | 1 - .../installer/threads/EasilyCancelable.java | 26 ------------------- 2 files changed, 27 deletions(-) delete mode 100644 src/main/java/ecorp/easy/installer/threads/EasilyCancelable.java diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index bf106ae6..04ae1bd0 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -24,7 +24,6 @@ import ecorp.easy.installer.helpers.DeviceHelper; import ecorp.easy.installer.logger.GUIAppender; import ecorp.easy.installer.logger.LogPathPropertyDefiner; import ecorp.easy.installer.models.DataBundle; -import ecorp.easy.installer.threads.EasilyCancelable; import ecorp.easy.installer.threads.FlashThread; import ecorp.easy.installer.threads.TimerTask; import ecorp.easy.installer.threads.UploadToEcloudTask; diff --git a/src/main/java/ecorp/easy/installer/threads/EasilyCancelable.java b/src/main/java/ecorp/easy/installer/threads/EasilyCancelable.java deleted file mode 100644 index 401e131c..00000000 --- a/src/main/java/ecorp/easy/installer/threads/EasilyCancelable.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2019-2020 - ECORP SAS - - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package ecorp.easy.installer.threads; - -/** - * - * @author vincent Bourgmayer - */ -public interface EasilyCancelable { - - public boolean onCancelRequestRecieved(); -} -- GitLab From d24a7b3ee01ae6dfe949936ed6777464dffbedb4 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Tue, 21 Jul 2020 13:39:13 +0200 Subject: [PATCH 5/6] run UploadToEcloudTask as daemon. Same for AskAccountTask --- .../controllers/subcontrollers/EAccountController.java | 10 +++++++++- .../controllers/subcontrollers/FeedbackController.java | 4 +++- .../subcontrollers/FlashSceneController.java | 4 +++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java index 7a7005ed..9dac87fc 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/EAccountController.java @@ -22,6 +22,7 @@ import java.net.URL; import java.util.ResourceBundle; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; import java.util.regex.Pattern; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -94,13 +95,20 @@ public class EAccountController extends AbstractSubController{ mailInput.requestFocus(); break; case 0: - ExecutorService executorSrv = Executors.newSingleThreadExecutor(); + ExecutorService executorSrv = Executors.newSingleThreadExecutor( new ThreadFactory() { + public Thread newThread(Runnable r) { + Thread t = Executors.defaultThreadFactory().newThread(r); + t.setDaemon(true); + return t; + } + }); AskAccountTask askInvitationTask = new AskAccountTask(userInput, i18n.getString("askAccount_string")); askInvitationTask.setOnSucceeded(workerStateEvent -> { String result = (String)workerStateEvent.getSource().getValue(); setResultInstruction(result); checkMailBtn.setText(i18n.getString("eAccount_btn_checkMail")); }); + executorSrv.submit(askInvitationTask); executorSrv.shutdown(); checkMailBtn.setText(i18n.getString("eAccount_lbl_processing")); diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java index fbd2ade9..6215f83a 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FeedbackController.java @@ -117,7 +117,9 @@ public class FeedbackController extends AbstractSubController { sendAnswerBtn.setText(i18n.getString("feedback_btn_sendTryAgain")); logger.error("onSendBtnClicked(), sending feedback: failure, error: {}", eh.getSource().getException().toString()); }); - new Thread(uploadTask).start(); + Thread uploadTaskThread = new Thread(uploadTask); + uploadTaskThread.setDaemon(true); + uploadTaskThread.start(); } diff --git a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java index 04ae1bd0..d7e59435 100644 --- a/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java +++ b/src/main/java/ecorp/easy/installer/controllers/subcontrollers/FlashSceneController.java @@ -397,7 +397,9 @@ public class FlashSceneController extends AbstractSubSteppedController implement logger.warn("sendLogToSupport(), sending log: failure, error = {}",eh.getSource().getException().toString() ); }); - new Thread(uploadTask).start(); + Thread uploadTaskThread = new Thread(uploadTask); + uploadTaskThread.setDaemon(true); + uploadTaskThread.start(); } } return false; -- GitLab From 8a62f4887e54015c3935d99b97cb13eb66f70466 Mon Sep 17 00:00:00 2001 From: "vincent.bourgmayer" Date: Tue, 21 Jul 2020 15:09:21 +0200 Subject: [PATCH 6/6] remove useless field in Step.java --- src/main/java/ecorp/easy/installer/models/Step.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ecorp/easy/installer/models/Step.java b/src/main/java/ecorp/easy/installer/models/Step.java index 067200d0..8713286c 100644 --- a/src/main/java/ecorp/easy/installer/models/Step.java +++ b/src/main/java/ecorp/easy/installer/models/Step.java @@ -24,7 +24,6 @@ import java.util.Map; */ public class Step { private StepUi ui; - private boolean startNewThread = false; //@TODO REMOVE! define if a new thread should be started if this command succeeds private String script; //script's file script private String output; //Key of output to store as common parameter private String afterSuccess; // index of next script if succeed -- GitLab