[Pkg-gnupg-commit] [gpgme] 88/412: python: Handle interpreter shutdown.

Daniel Kahn Gillmor dkg at fifthhorseman.net
Thu Sep 22 21:26:22 UTC 2016


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gpgme.

commit ce5121ad53b0e17fbf9150b354c80da73f7fe190
Author: Justus Winter <justus at gnupg.org>
Date:   Thu May 12 11:53:43 2016 +0200

    python: Handle interpreter shutdown.
    
    * lang/python/pyme/core.py: Avoid races at interpreter shutdown.  This
    silences the most annoying occurrences, however this problem also
    affects the SWIG generated code, which might indicate that the real
    problem is somewhere else.  If so, this change can be easily reverted.
    
    Signed-off-by: Justus Winter <justus at gnupg.org>
---
 lang/python/pyme/core.py | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/lang/python/pyme/core.py b/lang/python/pyme/core.py
index fd4802e..2a37ba3 100644
--- a/lang/python/pyme/core.py
+++ b/lang/python/pyme/core.py
@@ -66,21 +66,29 @@ class Context(GpgmeWrapper):
         self.last_progresscb = None
 
     def __del__(self):
+        if not pygpgme:
+            # At interpreter shutdown, pygpgme is set to NONE.
+            return
+
         self._free_passcb()
         self._free_progresscb()
-        if self.own:
+        if self.own and pygpgme.gpgme_release:
             pygpgme.gpgme_release(self.wrapped)
 
     def _free_passcb(self):
         if self.last_passcb != None:
-            pygpgme.pygpgme_clear_generic_cb(self.last_passcb)
-            pygpgme.delete_PyObject_p_p(self.last_passcb)
+            if pygpgme.pygpgme_clear_generic_cb:
+                pygpgme.pygpgme_clear_generic_cb(self.last_passcb)
+            if pygpgme.delete_PyObject_p_p:
+                pygpgme.delete_PyObject_p_p(self.last_passcb)
             self.last_passcb = None
 
     def _free_progresscb(self):
         if self.last_progresscb != None:
-            pygpgme.pygpgme_clear_generic_cb(self.last_progresscb)
-            pygpgme.delete_PyObject_p_p(self.last_progresscb)
+            if pygpgme.pygpgme_clear_generic_cb:
+                pygpgme.pygpgme_clear_generic_cb(self.last_progresscb)
+            if pygpgme.delete_PyObject_p_p:
+                pygpgme.delete_PyObject_p_p(self.last_progresscb)
             self.last_progresscb = None
 
     def op_keylist_all(self, *args, **kwargs):
@@ -292,14 +300,20 @@ class Data(GpgmeWrapper):
             self.new()
 
     def __del__(self):
-        if self.wrapped != None:
+        if not pygpgme:
+            # At interpreter shutdown, pygpgme is set to NONE.
+            return
+
+        if self.wrapped != None and pygpgme.gpgme_data_release:
             pygpgme.gpgme_data_release(self.wrapped)
         self._free_readcb()
 
     def _free_readcb(self):
         if self.last_readcb != None:
-            pygpgme.pygpgme_clear_generic_cb(self.last_readcb)
-            pygpgme.delete_PyObject_p_p(self.last_readcb)
+            if pygpgme.pygpgme_clear_generic_cb:
+                pygpgme.pygpgme_clear_generic_cb(self.last_readcb)
+            if pygpgme.delete_PyObject_p_p:
+                pygpgme.delete_PyObject_p_p(self.last_readcb)
             self.last_readcb = None
 
     def new(self):

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gpgme.git



More information about the Pkg-gnupg-commit mailing list