Macaulay2 Engine
Loading...
Searching...
No Matches

◆ delete_elem()

void stash::delete_elem ( void * p)
inline

Definition at line 147 of file mem.hpp.

149{
150 if (p == nullptr) return;
151 freemem(p);
152 return;
153 // if (trace_bad_deletes)
154 // {
155 // for (void *q = free_list; q != NULL; q = *(reinterpret_cast<void
156 // **>(q)))
157 // if (q == p)
158 // assert(0);
159 // }
160
161 n_inuse--;
162 n_frees++;
163 if (n_per_slab == 0)
164 {
165 // deleted_amount += element_size;
166 char *q = reinterpret_cast<char *>(p);
167 freemem(q);
168 return;
169 }
170 acquireSpinLock(&list_spinlock);
171 memset(p, 0, element_size); // we clear this element because it's free, and
172 // it may contain words that look like pointers
173 // to gc
174 *(reinterpret_cast<void **>(p)) = free_list;
175 free_list = p;
176 releaseSpinLock(&list_spinlock);
177}
int n_per_slab
Definition mem.hpp:94
void * free_list
Definition mem.hpp:106
spinLock list_spinlock
Definition mem.hpp:118
size_t n_frees
Definition mem.hpp:112
size_t element_size
Definition mem.hpp:91
size_t n_inuse
Definition mem.hpp:110
int p
void freemem(void *s)
Definition m2-mem.cpp:103

References element_size, free_list, freemem(), list_spinlock, n_frees, n_inuse, n_per_slab, and p.