File tree 1 file changed +18
-10
lines changed
1 file changed +18
-10
lines changed Original file line number Diff line number Diff line change @@ -294,6 +294,21 @@ cdef extern from "parser/io.h":
294
294
size_t * bytes_read, int * status, const char * encoding_errors)
295
295
296
296
297
+ # Factor out code common to TextReader.__dealloc__ and TextReader.close
298
+ # It cannot be a class method, since calling self.close() in __dealloc__
299
+ # which causes a class attribute lookup and violates best parctices
300
+ # https://cython.readthedocs.io/en/latest/src/userguide/special_methods.html#finalization-method-dealloc
301
+ def _close (reader ):
302
+ # also preemptively free all allocated memory
303
+ parser_free(reader.parser)
304
+ if reader.true_set:
305
+ kh_destroy_str_starts(reader.true_set)
306
+ reader.true_set = NULL
307
+ if reader.false_set:
308
+ kh_destroy_str_starts(reader.false_set)
309
+ reader.false_set = NULL
310
+
311
+
297
312
cdef class TextReader:
298
313
"""
299
314
@@ -558,18 +573,11 @@ cdef class TextReader:
558
573
pass
559
574
560
575
def __dealloc__ (self ):
561
- self .close ()
576
+ _close ()
562
577
parser_del(self .parser)
563
578
564
- def close (self ) -> None:
565
- # also preemptively free all allocated memory
566
- parser_free(self.parser )
567
- if self.true_set:
568
- kh_destroy_str_starts(self.true_set )
569
- self.true_set = NULL
570
- if self.false_set:
571
- kh_destroy_str_starts(self.false_set )
572
- self.false_set = NULL
579
+ def close (self ):
580
+ _close(self )
573
581
574
582
def _set_quoting (self , quote_char: str | bytes | None , quoting: int ):
575
583
if not isinstance (quoting, int ):
You can’t perform that action at this time.
0 commit comments