avoid GC untrack if we haven't yet GC tracked
diff --git a/src/crypto/pkcs12.c b/src/crypto/pkcs12.c
index 2f6f944..2302242 100644
--- a/src/crypto/pkcs12.c
+++ b/src/crypto/pkcs12.c
@@ -20,6 +20,7 @@
  */
 
 static void crypto_PKCS12_dealloc(crypto_PKCS12Obj *self);
+static int crypto_PKCS12_clear(crypto_PKCS12Obj *self);
 
 static char crypto_PKCS12_get_certificate_doc[] = "\n\
 Return certificate portion of the PKCS12 structure\n\
@@ -414,7 +415,10 @@
 
 error:
     sk_X509_free(cacerts); /* NULL safe. Free just the container. */
-    crypto_PKCS12_dealloc(self);
+    if (self) {
+        crypto_PKCS12_clear(self);
+        PyObject_GC_Del(self);
+    }
     return NULL;
 }