You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by fu...@apache.org on 2019/09/30 04:12:48 UTC

svn commit: r1867740 - in /subversion/branches/swig-py3/subversion/bindings/swig/python: svn/fs.py tests/fs.py

Author: futatuki
Date: Mon Sep 30 04:12:48 2019
New Revision: 1867740

URL: http://svn.apache.org/viewvc?rev=1867740&view=rev
Log:
On branch swig-py3: Fix resource warnings on Python 3

* subversion/bindings/swig/python/svn/fs.py
  (FileDiff.procs): New list variable to hold process objects
  (FileDiff.get_pipe): Hold process object to self.procs.
  (FileDiff.__del__): Try to kill processes if they are alive before delete.
* subversion/bindings/swig/python/tests/fs.py
  (SubversionFSTestCase.test_diff_repos_paths_internal,
  SubversionFSTestCase.test_diff_repos_paths_external): explicitly close pipe.

Tested by: jcorvel
  (ResourceWarning in FileDiff object was caused somewhat different
  between Linux/Unix and Windows. jcovel helped me to reproduce the problem
  on Windows platform)

Modified:
    subversion/branches/swig-py3/subversion/bindings/swig/python/svn/fs.py
    subversion/branches/swig-py3/subversion/bindings/swig/python/tests/fs.py

Modified: subversion/branches/swig-py3/subversion/bindings/swig/python/svn/fs.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/bindings/swig/python/svn/fs.py?rev=1867740&r1=1867739&r2=1867740&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/bindings/swig/python/svn/fs.py (original)
+++ subversion/branches/swig-py3/subversion/bindings/swig/python/svn/fs.py Mon Sep 30 04:12:48 2019
@@ -60,6 +60,7 @@ class FileDiff:
     self.tempfile1 = None
     self.tempfile2 = None
     self.difftemp  = None
+    self.procs     = []
 
     self.root1 = root1
     self.path1 = path1
@@ -124,6 +125,7 @@ class FileDiff:
       # open the pipe, and return the file object for reading from the child.
       p = _subprocess.Popen(cmd, stdout=_subprocess.PIPE, bufsize=-1,
                             close_fds=_sys.platform != "win32")
+      self.procs.append(p)
       return p.stdout
 
     else:
@@ -158,3 +160,12 @@ class FileDiff:
           _os.remove(tmpfile)
         except OSError:
           pass
+    for proc in self.procs:
+      if proc.poll() is None:
+        proc.terminate()
+        if _sys.hexversion >= 0x030300F0:
+          try:
+            proc.wait(10)
+          except _subprocess.TimeoutExired:
+            proc.kill() 
+        del proc

Modified: subversion/branches/swig-py3/subversion/bindings/swig/python/tests/fs.py
URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/bindings/swig/python/tests/fs.py?rev=1867740&r1=1867739&r2=1867740&view=diff
==============================================================================
--- subversion/branches/swig-py3/subversion/bindings/swig/python/tests/fs.py (original)
+++ subversion/branches/swig-py3/subversion/bindings/swig/python/tests/fs.py Mon Sep 30 04:12:48 2019
@@ -96,6 +96,7 @@ class SubversionFSTestCase(unittest.Test
 
     diffp = fdiff.get_pipe()
     diffoutput = diffp.read().decode('utf8')
+    diffp.close()
 
     self.assertTrue(diffoutput.find(u'-' + self.unistr) > 0)
 
@@ -116,6 +117,7 @@ class SubversionFSTestCase(unittest.Test
                         None, None, diffoptions=[])
     diffp = fdiff.get_pipe()
     diffoutput = diffp.read().decode('utf8')
+    diffp.close()
 
     self.assertTrue(diffoutput.find(u'< ' + self.unistr) > 0)