Add dynamic resizing of returned events array if we keep getting too many events
This commit is contained in:
parent
9046c9b878
commit
3fc440edab
|
@ -129,6 +129,7 @@ int lwevent_wait(int timeout_ms)
|
|||
{
|
||||
int ret, i, revents;
|
||||
struct lwevent* ev;
|
||||
struct epoll_event* new_revents;
|
||||
|
||||
_lwevent_invalid_head = 0;
|
||||
|
||||
|
@ -150,14 +151,24 @@ int lwevent_wait(int timeout_ms)
|
|||
ev->callback(ev, revents);
|
||||
}
|
||||
|
||||
/* possibly resize returned events array */
|
||||
++_lw_revents_count;
|
||||
if(i == ret) ++_lw_revents_overcount;
|
||||
if(_lw_revents_overcount >= 4 && _lw_revents_overcount >= (_lw_revents_count >> 2)) {
|
||||
new_revents = malloc(sizeof(struct epoll_event) * (_lw_revents_size << 1));
|
||||
if(new_revents) {
|
||||
free(_lw_revents);
|
||||
_lw_revents = new_revents;
|
||||
_lw_revents_size <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* free any invalid struct lwevent objects */
|
||||
for(ev = _lwevent_invalid_head; ev; ev = _lwevent_invalid_head) {
|
||||
_lwevent_invalid_head = _lwevent_invalid_head->invalid_next;
|
||||
free(ev);
|
||||
}
|
||||
|
||||
/* TODO: possibly resize returned events array */
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue