another attempt at a thread-safe array

This commit is contained in:
leitner
2014-03-29 11:17:04 +00:00
parent c608502cd8
commit c548cce5a1
8 changed files with 120 additions and 111 deletions

View File

@@ -1,9 +1,20 @@
#include <stdlib.h>
#include <sys/mman.h>
#include <unistd.h>
#include "iarray.h"
static void freechain(iarray_page* p,size_t pagesize) {
while (p) {
iarray_page* n=p->next;
munmap(p,pagesize);
p=n;
}
}
void iarray_free(iarray* ia) {
size_t i;
for (i=0; i<ia->pagefence; ++i)
if (ia->pages[i]) free(ia->pages[i]);
free(ia->pages);
for (i=0; i<sizeof(ia->pages)/sizeof(ia->pages[0]); ++i) {
freechain(ia->pages[i],ia->bytesperpage);
ia->pages[i]=0;
}
}