MCPcopy Create free account
hub / github.com/3proxy/3proxy / myfree

Function myfree

src/myalloc.c:240–310  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

238}
239
240void myfree(void *p){
241 struct mempage **prevpage, *page;
242 int i;
243 unsigned pagesize;
244 unsigned size, j, k;
245
246 alloced--;
247#if DEBUGLEVEL == 2
248fprintf(stderr, "free %p\n", p);
249fflush(stderr);
250#endif
251 pthread_mutex_lock(&mem_mutex);
252 i = myfindsize(p, &prevpage, &page);
253 if (i == nomem) {
254#if DEBUGLEVEL > 2
255fprintf(stderr, "Page does not exists, trying free()\n");
256fflush(stderr);
257#endif
258 pthread_mutex_unlock(&mem_mutex);
259 free(p);
260 return;
261 }
262 pagesize = memsizes[i];
263#if DEBUGLEVEL > 2
264fprintf(stderr, "Calculated pagesize: %u\n", pagesize);
265fflush(stderr);
266#endif
267 size = (unsigned)((unsigned char*)p - page->data);
268 if(size%pagesize) {
269#if DEBUGLEVEL > 0
270write(2, p, 4);
271fprintf(stderr, "\nGiven address is not block aligned, ignoring\n");
272fflush(stderr);
273#endif
274 pthread_mutex_unlock(&mem_mutex);
275 return; /* Hmmmmm */
276 }
277 *prevpage = page->next;
278 page->usable += pagesize;
279#if DEBUGLEVEL > 2
280fprintf(stderr, "New usable space: %u\n", page->usable);
281fflush(stderr);
282#endif
283 if(page->usable >= MEM64K && ((pagesize == MEM64K) || (pages[i] && pages[i]->usable))) {
284#if DEBUGLEVEL > 2
285fprintf(stderr, "Free this page\n");
286fflush(stderr);
287#endif
288 free(page);
289 }
290 else {
291 j = (size>>11);
292 k = ((size & 0x000007FF) >> 8);
293 k = ('\01'<<k);
294 if(page->bitmap[j] & k) {
295#if DEBUGLEVEL > 0
296fprintf(stderr, "Error: double free() %d/%d/%d\n", j, k, page->bitmap[j]);
297fflush(stderr);

Callers 15

proxymain.cFile · 0.85
srvinitFunction · 0.85
srvinit2Function · 0.85
srvfreeFunction · 0.85
freeparamFunction · 0.85
itfreeFunction · 0.85
freeaclFunction · 0.85
proxychildFunction · 0.85
dnsprchildFunction · 0.85
clientnegotiateFunction · 0.85
handleredirectFunction · 0.85
cacheauthFunction · 0.85

Calls 1

myfindsizeFunction · 0.85

Tested by

no test coverage detected