@@ -85,7 +85,9 @@ cdef class {{name}}Vector:
85
85
self.data.data = <{{arg}}*> self.ao.data
86
86
87
87
def __dealloc__(self):
88
- PyMem_Free(self.data)
88
+ if self.data is not NULL:
89
+ PyMem_Free(self.data)
90
+ self.data = NULL
89
91
90
92
def __len__(self):
91
93
return self.data.n
@@ -133,8 +135,11 @@ cdef class StringVector:
133
135
self.data.data[i] = orig_data[i]
134
136
135
137
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
138
143
139
144
def __len__(self):
140
145
return self.data.n
@@ -223,7 +228,9 @@ cdef class {{name}}HashTable(HashTable):
223
228
return self.table.size
224
229
225
230
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
227
234
228
235
def __contains__(self, object key):
229
236
cdef khiter_t k
@@ -453,7 +460,9 @@ cdef class StringHashTable(HashTable):
453
460
kh_resize_str(self.table, size_hint)
454
461
455
462
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
457
466
458
467
cpdef get_item(self, object val):
459
468
cdef:
@@ -691,7 +700,8 @@ cdef class PyObjectHashTable(HashTable):
691
700
692
701
def __dealloc__(self):
693
702
if self.table is not NULL:
694
- self.destroy()
703
+ kh_destroy_pymap(self.table)
704
+ self.table = NULL
695
705
696
706
def __len__(self):
697
707
return self.table.size
@@ -704,10 +714,6 @@ cdef class PyObjectHashTable(HashTable):
704
714
k = kh_get_pymap(self.table, <PyObject*>key)
705
715
return k != self.table.n_buckets
706
716
707
- def destroy(self):
708
- kh_destroy_pymap(self.table)
709
- self.table = NULL
710
-
711
717
cpdef get_item(self, object val):
712
718
cdef khiter_t k
713
719
if val != val or val is None:
0 commit comments