diff --git a/select.c b/select.c index 1c2796766b7f6a503901dc44f853c227c1775a2d..edf48a67ad1e34b02120943114f839cf226a69a3 100644 --- a/select.c +++ b/select.c @@ -38,6 +38,7 @@ oop_adapter_select *oop_select_new( FD_ZERO(&s->active.wfd); FD_ZERO(&s->active.xfd); s->num_fd = 0; + s->num_fd_active = 0; s->do_timeout = 0; s->is_active = 0; s->call = call; diff --git a/sys.c b/sys.c index 9f0c1557ff5d21435e427e0621b942901144ca95..19bbeb38e8f26ca577359bee68deb661a10f8b99 100644 --- a/sys.c +++ b/sys.c @@ -86,12 +86,13 @@ static void sys_on_fd(oop_source *source,int fd,oop_event ev, int i,j,num_files = 1 + fd; sys_file *files = oop_malloc(num_files * sizeof(sys_file)); if (NULL == files) return; /* ugh */ + memcpy(files,sys->files,sizeof(sys_file) * sys->num_files); for (i = sys->num_files; i < num_files; ++i) for (j = 0; j < OOP_NUM_EVENTS; ++j) files[i][j].f = NULL; - oop_free(sys->files); + if (NULL != sys->files) oop_free(sys->files); sys->files = files; sys->num_files = num_files; } @@ -414,6 +415,7 @@ void oop_sys_delete(oop_source_sys *sys) { assert(NULL == sys->files[i][j].f && "cannot delete with file handler"); assert(0 == sys->num_events); + if (NULL != sys->files) oop_free(sys->files); oop_free(sys); }