switch io_fds from array to newly implemented (hopefully thread-safe) iarray

switch epoll from level triggering to edge triggering
This commit is contained in:
leitner
2014-04-04 18:11:03 +00:00
parent dd436c5bf8
commit a544abc39c
33 changed files with 147 additions and 190 deletions

View File

@@ -17,7 +17,7 @@ static iarray_page* new_page(size_t pagesize) {
}
void* iarray_allocate(iarray* ia,size_t pos) {
size_t index;
size_t index,prevlen=ia->len;
iarray_page** p=&ia->pages[pos%(sizeof(ia->pages)/sizeof(ia->pages[0]))];
iarray_page* newpage=0;
for (index=0; pos<index+ia->elemperpage; index+=ia->elemperpage) {
@@ -28,7 +28,11 @@ void* iarray_allocate(iarray* ia,size_t pos) {
newpage=0;
}
if (index+ia->elemperpage>pos) {
size_t l;
if (newpage) munmap(newpage,ia->bytesperpage);
do {
l=__CAS(&ia->len,prevlen,pos);
} while (l<pos);
return &(*p)->data[(pos-index)*ia->elemsize];
}
p=&(*p)->next;