45 lines
1.6 KiB
Diff
45 lines
1.6 KiB
Diff
From e6707d5e094dc36db4319ce4d052a6ad568a5d26 Mon Sep 17 00:00:00 2001
|
|
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
|
|
Date: Tue, 15 Aug 2023 16:29:13 +0200
|
|
Subject: [PATCH] brlapi: Fix python crash on connection error
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
From Lukáš Tyrychtr:
|
|
“
|
|
Cython 3.0 started using the new Python object finalization APIs from PEP 442
|
|
”
|
|
|
|
This means that __del__ gets called even when raising an exception from
|
|
__init__, while it was not before. To cope with both behaviors, we can
|
|
set self.h to NULL to determine whether it still exists or not.
|
|
|
|
Thanks Lukáš Tyrychtr for the investigation and patch draft!
|
|
---
|
|
Bindings/Python/brlapi.pyx | 4 +++-
|
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/Bindings/Python/brlapi.pyx b/Bindings/Python/brlapi.pyx
|
|
index 0136895eaf..af62cc9be0 100644
|
|
--- a/Bindings/Python/brlapi.pyx
|
|
+++ b/Bindings/Python/brlapi.pyx
|
|
@@ -453,6 +453,7 @@ cdef class Connection:
|
|
c_brlapi.brlapi_protocolExceptionInit(self.h)
|
|
if self.fd == -1:
|
|
c_brlapi.free(self.h)
|
|
+ self.h = NULL
|
|
raise ConnectionError(self.settings.host, self.settings.auth)
|
|
|
|
def closeConnection(self):
|
|
@@ -465,7 +466,8 @@ cdef class Connection:
|
|
"""Release resources used by the connection"""
|
|
if self.fd != -1:
|
|
c_brlapi.brlapi__closeConnection(self.h)
|
|
- c_brlapi.free(self.h)
|
|
+ if self.h != NULL:
|
|
+ c_brlapi.free(self.h)
|
|
|
|
property host:
|
|
"""To get authorized to connect, libbrlapi has to tell the BrlAPI server a secret key, for security reasons. This is the path to the file which holds it; it will hence have to be readable by the application."""
|