--- a/src/eric7/PipInterface/Pip.py Fri Sep 06 14:56:18 2024 +0200 +++ b/src/eric7/PipInterface/Pip.py Sun Sep 15 16:56:58 2024 +0200 @@ -26,6 +26,7 @@ from PyQt6.QtWidgets import QDialog, QInputDialog, QLineEdit from eric7 import Preferences +from eric7.EricCore.EricProcess import EricProcess from eric7.EricNetwork.EricNetworkProxyFactory import ( EricNetworkProxyFactory, proxyAuthenticationRequired, @@ -86,6 +87,8 @@ ) self.__replies = [] + self.__outdatedProc = None + self.__vulnerabilityChecker = PipVulnerabilityChecker(self, self) def getNetworkAccessManager(self): @@ -106,6 +109,14 @@ """ return self.__vulnerabilityChecker + def shutdown(self): + """ + Public method to perform shutdown actions. + """ + if self.__outdatedProc is not None: + self.__outdatedProc.kill() # end the process forcefully + self.__outdatedProc = None + ########################################################################## ## Methods below implement some utility functions ########################################################################## @@ -925,8 +936,12 @@ indexUrl = Preferences.getPip("PipSearchIndex") + "/simple" args += ["--index-url", indexUrl] - proc = QProcess() if callback: + if self.__outdatedProc is not None: + self.__outdatedProc.kill() # end the process forcefully + self.__outdatedProc = None + + proc = EricProcess(timeout=30000) self.__outdatedProc = proc proc.finished.connect( functools.partial(self.__outdatedFinished, callback, proc) @@ -934,6 +949,7 @@ proc.start(interpreter, args) return None + proc = QProcess() proc.start(interpreter, args) if proc.waitForStarted(15000) and proc.waitForFinished(30000): packages = self.__extractOutdatedPackages(proc) @@ -989,7 +1005,11 @@ """ packages = ( self.__extractOutdatedPackages(proc) - if exitStatus == QProcess.ExitStatus.NormalExit and exitCode == 0 + if ( + not proc.timedOut() + and exitStatus == QProcess.ExitStatus.NormalExit + and exitCode == 0 + ) else {} ) callback(packages)