Lines Matching refs:loop
31 int uv_loop_init(uv_loop_t* loop) {
36 UV_LOGI("init:%{public}zu", (size_t)loop);
37 saved_data = loop->data;
38 memset(loop, 0, sizeof(*loop));
39 loop->data = saved_data;
44 loop->internal_fields = lfields;
53 heap_init((struct heap*) &loop->timer_heap);
54 uv__queue_init(&loop->wq);
56 uv__loop_internal_fields_t* lfields_qos = uv__get_internal_fields(loop);
63 uv__queue_init(&loop->idle_handles);
64 uv__queue_init(&loop->async_handles);
65 uv__queue_init(&loop->check_handles);
66 uv__queue_init(&loop->prepare_handles);
67 uv__queue_init(&loop->handle_queue);
69 loop->active_handles = 0;
70 loop->active_reqs.count = 0;
71 loop->nfds = 0;
72 loop->watchers = NULL;
73 loop->nwatchers = 0;
74 uv__queue_init(&loop->pending_queue);
75 uv__queue_init(&loop->watcher_queue);
77 loop->closing_handles = NULL;
78 uv__update_time(loop);
79 loop->async_io_watcher.fd = -1;
80 loop->async_wfd = -1;
81 loop->signal_pipefd[0] = -1;
82 loop->signal_pipefd[1] = -1;
83 loop->backend_fd = -1;
84 loop->emfile_fd = -1;
86 loop->timer_counter = 0;
87 loop->stop_flag = 0;
89 err = uv__platform_loop_init(loop);
94 err = uv__process_init(loop);
97 uv__queue_init(&loop->process_handles);
99 err = uv_rwlock_init(&loop->cloexec_lock);
103 err = uv_mutex_init(&loop->wq_mutex);
107 err = uv_async_init(loop, &loop->wq_async, uv__work_done);
111 uv__handle_unref(&loop->wq_async);
112 loop->wq_async.flags |= UV_HANDLE_INTERNAL;
114 loop->magic = UV_LOOP_MAGIC;
118 uv_mutex_destroy(&loop->wq_mutex);
121 uv_rwlock_destroy(&loop->cloexec_lock);
124 uv__signal_loop_cleanup(loop);
127 uv__platform_loop_delete(loop);
134 loop->internal_fields = NULL;
136 uv__free(loop->watchers);
137 loop->nwatchers = 0;
142 int uv_loop_fork(uv_loop_t* loop) {
147 err = uv__io_fork(loop);
151 err = uv__async_fork(loop);
155 err = uv__signal_loop_fork(loop);
160 for (i = 0; i < loop->nwatchers; i++) {
161 w = loop->watchers[i];
167 uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
175 void uv__loop_close(uv_loop_t* loop) {
178 uv__signal_loop_cleanup(loop);
179 uv__platform_loop_delete(loop);
180 uv__async_stop(loop);
182 if (loop->emfile_fd != -1) {
183 uv__close(loop->emfile_fd);
184 loop->emfile_fd = -1;
187 if (loop->backend_fd != -1) {
189 fdsan_close_with_tag(loop->backend_fd, uv__get_addr_tag((void *)&loop->backend_fd));
191 uv__close(loop->backend_fd);
193 UV_LOGI("close:%{public}zu, backend_fd:%{public}d", (size_t)loop, loop->backend_fd);
194 loop->backend_fd = -1;
197 uv_mutex_lock(&loop->wq_mutex);
199 assert(uv__queue_empty(&loop->wq) && "thread pool work queue not empty!");
201 assert(!uv__has_active_reqs(loop));
202 uv_mutex_unlock(&loop->wq_mutex);
203 uv_mutex_destroy(&loop->wq_mutex);
209 uv_rwlock_destroy(&loop->cloexec_lock);
212 assert(uv__queue_empty(&loop->pending_queue));
213 assert(uv__queue_empty(&loop->watcher_queue));
214 assert(loop->nfds == 0);
217 uv__free(loop->watchers);
218 loop->watchers = NULL;
219 loop->nwatchers = 0;
221 lfields = uv__get_internal_fields(loop);
224 loop->internal_fields = NULL;
225 loop->magic = ~UV_LOOP_MAGIC;
229 int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) {
232 lfields = uv__get_internal_fields(loop);
244 loop->flags |= UV_LOOP_BLOCK_SIGPROF;