private ProgressDialog progressDlg = null;
private DAResult error;
private boolean stopFromTarget = false;
- private Boolean stopThreadCompleted = false;
+ private Thread stopThread = null;
public StopTraceManager(DAResult err, boolean stopFromTarget) {
this.error = err;
this.stopFromTarget = stopFromTarget;
}
+
+ private static class ForcedStopThread extends Thread {
+ public void run() {
+ // stop data channel
+ DataChannelThread.getInstance().stopForced();
+ // stop message parser
+ MessageParser.getInstance().stopForced();
+ // stop log parser
+ LogParser.getInstance().stopForced();
+ // stop page data manager
+ DataManagerRegistry.stopThreadsForced();
+ // stop other db inserters
+ CallStackInserter.getInstance().stopForced();
+ }
+ }
+ private static class NormalStopThread extends Thread {
+ public void run() {
+ // stop data channel
+ DataChannelThread.getInstance().stopNormal();
+ // stop message parser
+ MessageParser.getInstance().stopNormal();
+ // stop log parser
+ LogParser.getInstance().stopNormal();
+ // stop page data manager
+ DataManagerRegistry.stopThreadsNormal();
+ // stop other db inserters
+ CallStackInserter.getInstance().stopNormal();
+ }
+ }
+
@Override
public void run() {
// DAResult result = DAResult.SUCCESS;
// if error code equals with canceling then stop threads by force
if (error.equals(DAResult.ErrorCode.ERR_BY_USER_CANCEL)) {
- Thread stopForcedThread = new Thread(new Runnable() {
- public void run() {
- synchronized(stopThreadCompleted){
- stopThreadCompleted=false;
- }
- // stop data channel
- DataChannelThread.getInstance().stopForced();
- // stop message parser
- MessageParser.getInstance().stopForced();
- // stop log parser
- LogParser.getInstance().stopForced();
- // stop page data manager
- DataManagerRegistry.stopThreadsForced();
- // stop other db inserters
- CallStackInserter.getInstance().stopForced();
- synchronized(stopThreadCompleted){
- stopThreadCompleted=true;
- }
- }
- });
-
- stopForcedThread.start();
-
+ stopThread = new ForcedStopThread();
} else {
- Thread stopNormalThread = new Thread(new Runnable() {
- public void run() {
- synchronized(stopThreadCompleted){
- stopThreadCompleted=false;
- }
- // stop data channel
- DataChannelThread.getInstance().stopNormal();
- // stop message parser
- MessageParser.getInstance().stopNormal();
- // stop log parser
- LogParser.getInstance().stopNormal();
- // stop page data manager
- DataManagerRegistry.stopThreadsNormal();
- // stop other db inserters
- CallStackInserter.getInstance().stopNormal();
- synchronized(stopThreadCompleted){
- stopThreadCompleted=true;
- }
- }
- });
-
- stopNormalThread.start();
+ stopThread = new NormalStopThread();
Project project = Global.getProject();
if (project != null && project.isValid()) {
}
+ stopThread.start();
+
// change summary UI
// change to summary page
UIActionHolder.getUIAction().applyStopTraceUI();
DLogDataManager.getInstance().stopDlog();
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- BaseView baseView = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID);
- baseView.getTopComposite().updateView();
- }
- });
+ if (Global.isGUIMode()) {
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ BaseView baseView = (BaseView) WorkbenchUtil.getViewPart(BaseView.ID);
+ baseView.getTopComposite().updateView();
+ }
+ });
+ }
} finally {
- // set DA state as result of start progress
- DAState.changeCurrentState(DAState.DONE);
// close progress dialog if not error case
if (progressDlg != null) {
}
}
if (Global.isGUIMode()) {
- updateHeapDataManager();
- updateToolbar();
+ startUpdateHeapDataManager();
}
+ updateDAState();
}
}
/**
* Calculate allocation data in HeapDataManager.
*/
- private void updateHeapDataManager() {
+ private void startUpdateHeapDataManager() {
if(SettingDataManager.INSTANCE.getSelectedFeatureSet().contains(Feature.INTERNAL_PROBE_MEMORY)) {
Thread calculateAllocData = new Thread(new Runnable() {
public void run() {
}
/**
- * Enable ToolBar to wait while DataThreads clear completed.
+ * Wait while DataThreads clear completed then update DAState and ToolBar state.
*/
- private void updateToolbar() {
- // Enable ToolBar wait DataThreads clear completed.
- Thread enableToolBar = new Thread(new Runnable() {
+ private void updateDAState() {
+ if (stopThread != null) {
+ try {
+ stopThread.join();
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ }
+
+ stopThread = null;
+ }
+
+ DAState.changeCurrentState(DAState.DONE);
+ if (Global.isGUIMode()) {
+ // set shortcut and toolbar UI as DA state
+ ShortCutManager.getInstance().setEnabled(true);
+ Toolbar.INSTANCE.changeUIState(DAState.getCurrentState());
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
public void run() {
- boolean checkCompleted = false;
-
- synchronized(stopThreadCompleted){
- checkCompleted = stopThreadCompleted;
- }
-
- while(checkCompleted==false){
- try {
- Thread.sleep(10);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- break;
- }
-
- synchronized(stopThreadCompleted){
- checkCompleted = stopThreadCompleted;
- }
- }
- // set shortcut and toolbar UI as DA state
- ShortCutManager.getInstance().setEnabled(true);
- Toolbar.INSTANCE.changeUIState(DAState.getCurrentState());
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_SAVE, true);
- MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.ANALYZE_SCREENSHOT, false);
- MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_NEW, true);
- MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_LOAD, true);
- }
- });
-
-
+ MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_SAVE, true);
+ MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.ANALYZE_SCREENSHOT, false);
+ MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_NEW, true);
+ MenuBar.getInstance().setMenuItemEnable(MenuBarLabels.FILE_LOAD, true);
}
});
- enableToolBar.start();
+ }
}
}