| 28 | #include <unistd.h> |
| 29 | |
| 30 | int uv_loop_init(uv_loop_t* loop) { |
| 31 | uv__loop_internal_fields_t* lfields; |
| 32 | void* saved_data; |
| 33 | int err; |
| 34 | |
| 35 | |
| 36 | saved_data = loop->data; |
| 37 | memset(loop, 0, sizeof(*loop)); |
| 38 | loop->data = saved_data; |
| 39 | |
| 40 | lfields = (uv__loop_internal_fields_t*) uv__calloc(1, sizeof(*lfields)); |
| 41 | if (lfields == NULL) |
| 42 | return UV_ENOMEM; |
| 43 | loop->internal_fields = lfields; |
| 44 | |
| 45 | err = uv_mutex_init(&lfields->loop_metrics.lock); |
| 46 | if (err) |
| 47 | goto fail_metrics_mutex_init; |
| 48 | memset(&lfields->loop_metrics.metrics, |
| 49 | 0, |
| 50 | sizeof(lfields->loop_metrics.metrics)); |
| 51 | |
| 52 | heap_init((struct heap*) &loop->timer_heap); |
| 53 | uv__queue_init(&loop->wq); |
| 54 | uv__queue_init(&loop->idle_handles); |
| 55 | uv__queue_init(&loop->async_handles); |
| 56 | uv__queue_init(&loop->check_handles); |
| 57 | uv__queue_init(&loop->prepare_handles); |
| 58 | uv__queue_init(&loop->handle_queue); |
| 59 | |
| 60 | loop->active_handles = 0; |
| 61 | loop->active_reqs.count = 0; |
| 62 | loop->nfds = 0; |
| 63 | loop->watchers = NULL; |
| 64 | loop->nwatchers = 0; |
| 65 | uv__queue_init(&loop->pending_queue); |
| 66 | uv__queue_init(&loop->watcher_queue); |
| 67 | |
| 68 | loop->closing_handles = NULL; |
| 69 | uv__update_time(loop); |
| 70 | loop->async_io_watcher.fd = -1; |
| 71 | loop->async_wfd = -1; |
| 72 | loop->signal_pipefd[0] = -1; |
| 73 | loop->signal_pipefd[1] = -1; |
| 74 | loop->backend_fd = -1; |
| 75 | loop->emfile_fd = -1; |
| 76 | |
| 77 | loop->timer_counter = 0; |
| 78 | loop->stop_flag = 0; |
| 79 | |
| 80 | err = uv__platform_loop_init(loop); |
| 81 | if (err) |
| 82 | goto fail_platform_init; |
| 83 | |
| 84 | uv__signal_global_once_init(); |
| 85 | err = uv__process_init(loop); |
| 86 | if (err) |
| 87 | goto fail_signal_init; |
nothing calls this directly
no test coverage detected