| 3155 | } |
| 3156 | |
| 3157 | static void recycle_result(accept_result_t *accept_result) { |
| 3158 | psocket_t *ps = (psocket_t *) accept_result->base.iocpd->active_completer; |
| 3159 | pn_listener_t *l = ps->listener; |
| 3160 | reset_accept_result(accept_result); |
| 3161 | accept_result->new_sock = create_same_type_socket(ps->iocpd); |
| 3162 | { |
| 3163 | csguard g(&l->context.cslock); |
| 3164 | if (l->context.closing && accept_result->new_sock) { |
| 3165 | closesocket(accept_result->new_sock->socket); |
| 3166 | accept_result->new_sock->socket = INVALID_SOCKET; |
| 3167 | } |
| 3168 | begin_accept(ps->iocpd->acceptor, accept_result); // cleans up if closing |
| 3169 | l->context.completion_ops--; |
| 3170 | if (l->context.closing && listener_maybe_free(l, g)) |
| 3171 | return; |
| 3172 | } |
| 3173 | } |
| 3174 | |
| 3175 | void pn_listener_accept2(pn_listener_t *l, pn_connection_t *c, pn_transport_t *t) { |
| 3176 | accept_result_t *accept_result = NULL; |
no test coverage detected