| 115 | |
| 116 | |
| 117 | static ngx_int_t |
| 118 | ngx_devpoll_init(ngx_cycle_t *cycle, ngx_msec_t timer) |
| 119 | { |
| 120 | size_t n; |
| 121 | ngx_devpoll_conf_t *dpcf; |
| 122 | |
| 123 | dpcf = ngx_event_get_conf(cycle->conf_ctx, ngx_devpoll_module); |
| 124 | |
| 125 | if (dp == -1) { |
| 126 | dp = open("/dev/poll", O_RDWR); |
| 127 | |
| 128 | if (dp == -1) { |
| 129 | ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, |
| 130 | "open(/dev/poll) failed"); |
| 131 | return NGX_ERROR; |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | if (max_changes < dpcf->changes) { |
| 136 | if (nchanges) { |
| 137 | n = nchanges * sizeof(struct pollfd); |
| 138 | if (write(dp, change_list, n) != (ssize_t) n) { |
| 139 | ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
| 140 | "write(/dev/poll) failed"); |
| 141 | return NGX_ERROR; |
| 142 | } |
| 143 | |
| 144 | nchanges = 0; |
| 145 | } |
| 146 | |
| 147 | if (change_list) { |
| 148 | ngx_free(change_list); |
| 149 | } |
| 150 | |
| 151 | change_list = ngx_alloc(sizeof(struct pollfd) * dpcf->changes, |
| 152 | cycle->log); |
| 153 | if (change_list == NULL) { |
| 154 | return NGX_ERROR; |
| 155 | } |
| 156 | |
| 157 | if (change_index) { |
| 158 | ngx_free(change_index); |
| 159 | } |
| 160 | |
| 161 | change_index = ngx_alloc(sizeof(ngx_event_t *) * dpcf->changes, |
| 162 | cycle->log); |
| 163 | if (change_index == NULL) { |
| 164 | return NGX_ERROR; |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | max_changes = dpcf->changes; |
| 169 | |
| 170 | if (nevents < dpcf->events) { |
| 171 | if (event_list) { |
| 172 | ngx_free(event_list); |
| 173 | } |
| 174 |
nothing calls this directly
no test coverage detected