Skip to content

Commit a1d94d1

Browse files
authored
CLN: check NULL and have similar __dealloc__ code for all hashtables (pandas-dev#15101)
1 parent 5395074 commit a1d94d1

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

pandas/src/hashtable_class_helper.pxi.in

+16-10
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ cdef class {{name}}Vector:
8585
self.data.data = <{{arg}}*> self.ao.data
8686

8787
def __dealloc__(self):
88-
PyMem_Free(self.data)
88+
if self.data is not NULL:
89+
PyMem_Free(self.data)
90+
self.data = NULL
8991

9092
def __len__(self):
9193
return self.data.n
@@ -133,8 +135,11 @@ cdef class StringVector:
133135
self.data.data[i] = orig_data[i]
134136

135137
def __dealloc__(self):
136-
free(self.data.data)
137-
PyMem_Free(self.data)
138+
if self.data is not NULL:
139+
if self.data.data is not NULL:
140+
free(self.data.data)
141+
PyMem_Free(self.data)
142+
self.data = NULL
138143

139144
def __len__(self):
140145
return self.data.n
@@ -223,7 +228,9 @@ cdef class {{name}}HashTable(HashTable):
223228
return self.table.size
224229

225230
def __dealloc__(self):
226-
kh_destroy_{{dtype}}(self.table)
231+
if self.table is not NULL:
232+
kh_destroy_{{dtype}}(self.table)
233+
self.table = NULL
227234

228235
def __contains__(self, object key):
229236
cdef khiter_t k
@@ -453,7 +460,9 @@ cdef class StringHashTable(HashTable):
453460
kh_resize_str(self.table, size_hint)
454461

455462
def __dealloc__(self):
456-
kh_destroy_str(self.table)
463+
if self.table is not NULL:
464+
kh_destroy_str(self.table)
465+
self.table = NULL
457466

458467
cpdef get_item(self, object val):
459468
cdef:
@@ -691,7 +700,8 @@ cdef class PyObjectHashTable(HashTable):
691700

692701
def __dealloc__(self):
693702
if self.table is not NULL:
694-
self.destroy()
703+
kh_destroy_pymap(self.table)
704+
self.table = NULL
695705

696706
def __len__(self):
697707
return self.table.size
@@ -704,10 +714,6 @@ cdef class PyObjectHashTable(HashTable):
704714
k = kh_get_pymap(self.table, <PyObject*>key)
705715
return k != self.table.n_buckets
706716

707-
def destroy(self):
708-
kh_destroy_pymap(self.table)
709-
self.table = NULL
710-
711717
cpdef get_item(self, object val):
712718
cdef khiter_t k
713719
if val != val or val is None:

0 commit comments

Comments
 (0)