void fiber_io_check(void) { if (__thread_fiber != NULL) { if (__thread_fiber->ev_fiber == NULL) { __thread_fiber->ev_fiber = acl_fiber_create( fiber_io_loop, __thread_fiber->event, STACK_SIZE); __thread_fiber->io_count = 0; __thread_fiber->nsleeping = 0; __thread_fiber->io_stop = 0; ring_init(&__thread_fiber->ev_timer); } return; } if (pthread_once(&__once_control, thread_init) != 0) { msg_fatal("%s(%d), %s: pthread_once error %s", __FILE__, __LINE__, __FUNCTION__, last_serror()); } var_maxfd = open_limit(0); if (var_maxfd <= 0) { var_maxfd = MAXFD; } __thread_fiber = (FIBER_TLS *) malloc(sizeof(FIBER_TLS)); __thread_fiber->event = event_create(var_maxfd); __thread_fiber->ev_fiber = acl_fiber_create(fiber_io_loop, __thread_fiber->event, STACK_SIZE); __thread_fiber->io_count = 0; __thread_fiber->nsleeping = 0; __thread_fiber->io_stop = 0; ring_init(&__thread_fiber->ev_timer); #ifdef SYS_WIN __thread_fiber->events = htable_create(var_maxfd); #else __thread_fiber->events = (FILE_EVENT **) calloc(var_maxfd, sizeof(FILE_EVENT*)); #endif if (__pthread_self() == main_thread_self()) { __main_fiber = __thread_fiber; atexit(fiber_io_main_free); } else if (pthread_setspecific(__fiber_key, __thread_fiber) != 0) { msg_fatal("pthread_setspecific error!"); } }
static EPOLL_EVENT *epfd_alloc(void) { EPOLL_EVENT *ee = calloc(1, sizeof(EPOLL_EVENT)); int maxfd = open_limit(0); if (maxfd <= 0) { msg_fatal("%s(%d), %s: open_limit error %s", __FILE__, __LINE__, __FUNCTION__, last_serror()); } ++maxfd; ee->fds = (EPOLL_CTX **) malloc(maxfd * sizeof(EPOLL_CTX *)); ee->nfds = maxfd; return ee; }
int closefrom(int lowfd) { int fd_limit = open_limit(0); int fd; /* * lowfrom does not have an easy to determine upper limit. A process may * have files open that were inherited from a parent process with a less * restrictive resource limit. */ if (lowfd < 0) { errno = EBADF; return (-1); } if (fd_limit > 500) fd_limit = 500; for (fd = lowfd; fd < fd_limit; fd++) (void) close(fd); return (0); }
int acl_fiber_set_fdlimit(int limit) { return open_limit(limit); }