From e6707d5e094dc36db4319ce4d052a6ad568a5d26 Mon Sep 17 00:00:00 2001 From: Samuel Thibault 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."""