Lines Matching refs:loop

30 int uv_loop_init(uv_loop_t* loop) {
36 saved_data = loop->data;
37 memset(loop, 0, sizeof(*loop));
38 loop->data = saved_data;
43 loop->internal_fields = lfields;
49 heap_init((struct heap*) &loop->timer_heap);
50 QUEUE_INIT(&loop->wq);
51 QUEUE_INIT(&loop->idle_handles);
52 QUEUE_INIT(&loop->async_handles);
53 QUEUE_INIT(&loop->check_handles);
54 QUEUE_INIT(&loop->prepare_handles);
55 QUEUE_INIT(&loop->handle_queue);
57 loop->active_handles = 0;
58 loop->active_reqs.count = 0;
59 loop->nfds = 0;
60 loop->watchers = NULL;
61 loop->nwatchers = 0;
62 QUEUE_INIT(&loop->pending_queue);
63 QUEUE_INIT(&loop->watcher_queue);
65 loop->closing_handles = NULL;
66 uv__update_time(loop);
67 loop->async_io_watcher.fd = -1;
68 loop->async_wfd = -1;
69 loop->signal_pipefd[0] = -1;
70 loop->signal_pipefd[1] = -1;
71 loop->backend_fd = -1;
72 loop->emfile_fd = -1;
74 loop->timer_counter = 0;
75 loop->stop_flag = 0;
77 err = uv__platform_loop_init(loop);
82 err = uv_signal_init(loop, &loop->child_watcher);
86 uv__handle_unref(&loop->child_watcher);
87 loop->child_watcher.flags |= UV_HANDLE_INTERNAL;
88 QUEUE_INIT(&loop->process_handles);
90 err = uv_rwlock_init(&loop->cloexec_lock);
94 err = uv_mutex_init(&loop->wq_mutex);
98 err = uv_async_init(loop, &loop->wq_async, uv__work_done);
102 uv__handle_unref(&loop->wq_async);
103 loop->wq_async.flags |= UV_HANDLE_INTERNAL;
108 uv_mutex_destroy(&loop->wq_mutex);
111 uv_rwlock_destroy(&loop->cloexec_lock);
114 uv__signal_loop_cleanup(loop);
117 uv__platform_loop_delete(loop);
124 loop->internal_fields = NULL;
126 uv__free(loop->watchers);
127 loop->nwatchers = 0;
132 int uv_loop_fork(uv_loop_t* loop) {
137 err = uv__io_fork(loop);
141 err = uv__async_fork(loop);
145 err = uv__signal_loop_fork(loop);
150 for (i = 0; i < loop->nwatchers; i++) {
151 w = loop->watchers[i];
157 QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
165 void uv__loop_close(uv_loop_t* loop) {
168 uv__signal_loop_cleanup(loop);
169 uv__platform_loop_delete(loop);
170 uv__async_stop(loop);
172 if (loop->emfile_fd != -1) {
173 uv__close(loop->emfile_fd);
174 loop->emfile_fd = -1;
177 if (loop->backend_fd != -1) {
178 uv__close(loop->backend_fd);
179 loop->backend_fd = -1;
182 uv_mutex_lock(&loop->wq_mutex);
183 assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!");
184 assert(!uv__has_active_reqs(loop));
185 uv_mutex_unlock(&loop->wq_mutex);
186 uv_mutex_destroy(&loop->wq_mutex);
192 uv_rwlock_destroy(&loop->cloexec_lock);
195 assert(QUEUE_EMPTY(&loop->pending_queue));
196 assert(QUEUE_EMPTY(&loop->watcher_queue));
197 assert(loop->nfds == 0);
200 uv__free(loop->watchers);
201 loop->watchers = NULL;
202 loop->nwatchers = 0;
204 lfields = uv__get_internal_fields(loop);
207 loop->internal_fields = NULL;
211 int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) {
214 lfields = uv__get_internal_fields(loop);
226 loop->flags |= UV_LOOP_BLOCK_SIGPROF;