summaryrefslogtreecommitdiff
path: root/src/frontEnd/Application.py
diff options
context:
space:
mode:
authorEyantra698Sumanto2021-08-25 18:17:23 +0530
committerEyantra698Sumanto2021-08-25 18:17:23 +0530
commit2151c084526e98ad076357f59706829f36946512 (patch)
tree4dcee457262423fb0c910664949b8a799a3ba553 /src/frontEnd/Application.py
parent840090d0eedac3c60026269f50f9bb8365e4801b (diff)
downloadeSim-2151c084526e98ad076357f59706829f36946512.tar.gz
eSim-2151c084526e98ad076357f59706829f36946512.tar.bz2
eSim-2151c084526e98ad076357f59706829f36946512.zip
Fixed Crash on closing Xterm while simulation running
Diffstat (limited to 'src/frontEnd/Application.py')
-rw-r--r--src/frontEnd/Application.py57
1 files changed, 51 insertions, 6 deletions
diff --git a/src/frontEnd/Application.py b/src/frontEnd/Application.py
index 94bce4ae..a260bda6 100644
--- a/src/frontEnd/Application.py
+++ b/src/frontEnd/Application.py
@@ -11,13 +11,14 @@
# NOTES: ---
# AUTHOR: Fahim Khan, fahim.elex@gmail.com
# MODIFIED: Rahul Paknikar, rahulp@iitb.ac.in
+# Sumanto Kar, jeetsumanto123@gmail.com
# ORGANIZATION: eSim Team at FOSSEE, IIT Bombay
# CREATED: Tuesday 24 February 2015
-# REVISION: Sunday 13 December 2020
+# REVISION: Wednesday 25 August 2021
# =========================================================================
import os
-
+import traceback
if os.name == 'nt': # noqa
from frontEnd import pathmagic # noqa:F401
init_path = ''
@@ -39,9 +40,11 @@ from PyQt5.Qt import QSize
import shutil
import time
import sys
-
+import psutil
# Its our main window of application.
+
+
class Application(QtWidgets.QMainWindow):
"""This class initializes all objects used in this file."""
global project_name
@@ -523,18 +526,60 @@ class Application(QtWidgets.QMainWindow):
print("Current Project is : ", self.obj_appconfig.current_project)
self.obj_Mainview.obj_dockarea.usermanual()
+ def checkIfProcessRunning(self, processName):
+ '''
+ Check if there is any running process
+ that contains the given name processName.
+ '''
+ # Iterate over the all the running process
+ for proc in psutil.process_iter():
+ try:
+ # Check if process name contains the given name string.
+ if processName.lower() in proc.name().lower():
+ return True
+ except (psutil.NoSuchProcess,
+ psutil.AccessDenied, psutil.ZombieProcess):
+ pass
+ return False
+
def open_ngspice(self):
"""This Function execute ngspice on current project."""
self.projDir = self.obj_appconfig.current_project["ProjectName"]
if self.projDir is not None:
- self.obj_Mainview.obj_dockarea.ngspiceEditor(self.projDir)
+ # Edited by Sumanto Kar 25/08/2021
+ if self.obj_Mainview.obj_dockarea.ngspiceEditor(
+ self.projDir) is False:
+ print(
+ "No .cir.out file"
+ "Check netlist file to change simulation parameters."
+ )
+ self.msg = QtWidgets.QErrorMessage()
+ self.msg.setModal(True)
+ self.msg.setWindowTitle("Warning Message")
+ self.msg.showMessage(
+ 'No .cir.out file'
+ )
+ self.msg.exec_()
+ return
currTime = time.time()
count = 0
while True:
try:
+ # Edited by Sumanto Kar 25/08/2021
st = os.stat(os.path.join(self.projDir, "plot_data_i.txt"))
+ if self.checkIfProcessRunning('xterm') is False:
+ self.msg = QtWidgets.QErrorMessage()
+ self.msg.setModal(True)
+ self.msg.setWindowTitle("Warning Message")
+ self.msg.showMessage(
+ 'Simulation was interuppted. '
+ 'Please close all the Xterm windows.'
+ 'And then rerun the simulation'
+ )
+ self.msg.exec_()
+ return
if st.st_mtime >= currTime:
break
except Exception:
@@ -543,7 +588,7 @@ class Application(QtWidgets.QMainWindow):
# Fail Safe ===>
count += 1
- if count >= 10:
+ if count >= 1000:
print(
"Ngspice taking too long for simulation. "
"Check netlist file to change simulation parameters."
@@ -572,7 +617,7 @@ class Application(QtWidgets.QMainWindow):
' Please look at console for more details.'
)
self.msg.exec_()
- print("Exception Message:", str(e))
+ print("Exception Message:", str(e), traceback.format_exc())
self.obj_appconfig.print_error('Exception Message : ' + str(e))
else: