Lines Matching defs:loop
102 static void uv__run_pending(uv_loop_t* loop);
260 handle->next_closing = handle->loop->closing_handles;
261 handle->loop->closing_handles = handle;
322 * into the closing queue makes the event loop spin but that's
357 static void uv__run_closing_handles(uv_loop_t* loop) {
361 p = loop->closing_handles;
362 loop->closing_handles = NULL;
377 int uv_backend_fd(const uv_loop_t* loop) {
378 return loop->backend_fd;
382 static int uv__loop_alive(const uv_loop_t* loop) {
383 return uv__has_active_handles(loop) ||
384 uv__has_active_reqs(loop) ||
385 !uv__queue_empty(&loop->pending_queue) ||
386 loop->closing_handles != NULL;
390 static int uv__backend_timeout(const uv_loop_t* loop) {
391 if (loop->stop_flag == 0 &&
392 /* uv__loop_alive(loop) && */
393 (uv__has_active_handles(loop) || uv__has_active_reqs(loop)) &&
394 uv__queue_empty(&loop->pending_queue) &&
395 uv__queue_empty(&loop->idle_handles) &&
396 (loop->flags & UV_LOOP_REAP_CHILDREN) == 0 &&
397 loop->closing_handles == NULL)
398 return uv__next_timeout(loop);
403 int uv_backend_timeout(const uv_loop_t* loop) {
404 if (uv__queue_empty(&loop->watcher_queue))
405 return uv__backend_timeout(loop);
411 int uv_loop_alive(const uv_loop_t* loop) {
412 return uv__loop_alive(loop);
416 int uv_loop_alive_taskpool(const uv_loop_t* loop, int initial_handles) {
417 return loop->active_handles > initial_handles ||
418 uv__has_active_reqs(loop) ||
419 !uv__queue_empty(&loop->pending_queue) ||
420 loop->closing_handles != NULL;
424 int is_uv_loop_good_magic(const uv_loop_t* loop);
427 int uv_run(uv_loop_t* loop, uv_run_mode mode) {
432 if (!is_uv_loop_good_magic(loop)) {
436 r = uv__loop_alive(loop);
438 uv__update_time(loop);
440 while (r != 0 && loop->stop_flag == 0) {
441 if (!is_uv_loop_good_magic(loop)) {
445 uv__update_time(loop);
446 uv__run_timers(loop);
449 uv__queue_empty(&loop->pending_queue) &&
450 uv__queue_empty(&loop->idle_handles);
452 uv__run_pending(loop);
453 uv__run_idle(loop);
454 uv__run_prepare(loop);
458 timeout = uv__backend_timeout(loop);
460 uv__metrics_inc_loop_count(loop);
462 uv__io_poll(loop, timeout);
465 * times to avoid loop starvation.*/
466 for (r = 0; r < 8 && !uv__queue_empty(&loop->pending_queue); r++)
467 uv__run_pending(loop);
474 uv__metrics_update_idle_time(loop);
476 uv__run_check(loop);
477 uv__run_closing_handles(loop);
488 uv__update_time(loop);
489 uv__run_timers(loop);
492 r = uv__loop_alive(loop);
500 if (loop->stop_flag != 0)
501 loop->stop_flag = 0;
507 void uv_update_time(uv_loop_t* loop) {
508 uv__update_time(loop);
854 static void uv__run_pending(uv_loop_t* loop) {
859 uv__queue_move(&loop->pending_queue, &pq);
866 w->cb(loop, w, POLLOUT);
882 static void maybe_resize(uv_loop_t* loop, unsigned int len) {
889 if (len <= loop->nwatchers)
893 if (loop->watchers != NULL) {
894 fake_watcher_list = loop->watchers[loop->nwatchers];
895 fake_watcher_count = loop->watchers[loop->nwatchers + 1];
902 watchers = uv__reallocf(loop->watchers,
903 (nwatchers + 2) * sizeof(loop->watchers[0]));
907 for (i = loop->nwatchers; i < nwatchers; i++)
912 loop->watchers = watchers;
913 loop->nwatchers = nwatchers;
929 void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
936 maybe_resize(loop, w->fd + 1);
940 * every tick of the event loop but the other backends allow us to
948 uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
950 if (loop->watchers[w->fd] == NULL) {
951 loop->watchers[w->fd] = w;
952 loop->nfds++;
957 void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
967 if ((unsigned) w->fd >= loop->nwatchers)
977 if (w == loop->watchers[w->fd]) {
978 assert(loop->nfds > 0);
979 loop->watchers[w->fd] = NULL;
980 loop->nfds--;
984 uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
988 void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
989 uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI);
994 uv__platform_invalidate_fd(loop, w->fd);
998 void uv__io_feed(uv_loop_t* loop, uv__io_t* w) {
1000 uv__queue_insert_tail(&loop->pending_queue, &w->pending_queue);
1011 int uv__fd_exists(uv_loop_t* loop, int fd) {
1012 return (unsigned) fd < loop->nwatchers && loop->watchers[fd] != NULL;
1931 int uv_register_task_to_event(struct uv_loop_s* loop, uv_post_task func, void* handler)
1934 if (loop == NULL)
1950 loop->data = (void *)data;
1958 int uv_unregister_task_to_event(struct uv_loop_s* loop)
1961 if (loop == NULL || loop->data == NULL ||
1962 ((uint64_t)loop->data >> UV_EVENT_MAGIC_OFFSETBITS) != (uint64_t)(UV_EVENT_MAGIC_OFFSET))
1964 loop->data = (struct uv_loop_data*)((uint64_t)loop->data -
1966 free(loop->data);
1967 loop->data = NULL;