Skip to content
This repository was archived by the owner on Feb 1, 2023. It is now read-only.

Commit be1a62b

Browse files
author
Release Manager
committed
Trac #30671: Random failure in src/sage/interfaces/psage.py
Clearly the dtor is racing with the sage-cleaner process that is deleting the temporary directory: {{{ File "src/sage/interfaces/psage.py", line 114, in sage.interfaces.psage.PSage.__del__ Failed example: PSage().__del__() Expected nothing Got: Exception ignored in: <function ExpectElement.__del__ at 0xd14d6388> Traceback (most recent call last): File "/home/buildbot/slave/sage_git/build/local/lib/python3.8 /site-packages/sage/interfaces/expect.py", line 1513, in __del__ P.clear(self._name) File "/home/buildbot/slave/sage_git/build/local/lib/python3.8 /site-packages/sage/interfaces/sage0.py", line 369, in clear self.eval('del %s' % var) File "/home/buildbot/slave/sage_git/build/local/lib/python3.8 /site-packages/sage/interfaces/psage.py", line 129, in eval if self.is_locked(): File "/home/buildbot/slave/sage_git/build/local/lib/python3.8 /site-packages/sage/interfaces/psage.py", line 97, in is_locked with open(self.__tmp) as fobj: FileNotFoundError: [Errno 2] No such file or directory: '/home/build bot/slave/sage_git/dot_sage/temp/sagebu16_32s02/3311/sage_smpux8mxorv//l ock' ********************************************************************** 1 item had failures: 1 of 2 in sage.interfaces.psage.PSage.__del__ [7 tests, 1 failure, 4.76 s] }}} URL: https://trac.sagemath.org/30671 Reported by: vbraun Ticket author(s): Markus Wageringel Reviewer(s): Volker Braun
2 parents ed7c4a3 + bd3c899 commit be1a62b

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/sage/interfaces/psage.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,21 @@ def __del__(self):
113113
114114
sage: PSage().__del__()
115115
"""
116-
if os.path.exists(self.__tmp_dir):
117-
for x in os.listdir(self.__tmp_dir):
118-
os.remove(os.path.join(self.__tmp_dir, x))
116+
try:
117+
files = os.listdir(self.__tmp_dir)
118+
except OSError:
119+
pass
120+
else:
121+
for x in files:
122+
try:
123+
os.remove(os.path.join(self.__tmp_dir, x))
124+
except OSError:
125+
pass
126+
try:
119127
os.removedirs(self.__tmp_dir)
128+
except OSError:
129+
pass
130+
120131
if not (self._expect is None):
121132
cmd = 'kill -9 %s'%self._expect.pid
122133
os.system(cmd)

0 commit comments

Comments
 (0)