Example #1
0
void h2o_socketpool_dispose(h2o_socketpool_t *pool)
{
    size_t i;

    pthread_mutex_lock(&pool->_shared.mutex);
    while (!h2o_linklist_is_empty(&pool->_shared.sockets)) {
        struct pool_entry_t *entry = H2O_STRUCT_FROM_MEMBER(struct pool_entry_t, all_link, pool->_shared.sockets.next);
        destroy_attached(entry);
        __sync_sub_and_fetch(&pool->_shared.count, 1);
    }
    pthread_mutex_unlock(&pool->_shared.mutex);
    pthread_mutex_destroy(&pool->_shared.mutex);

    if (pool->balancer != NULL) {
        pool->balancer->callbacks->destroy(pool->balancer);
    }

    if (pool->_ssl_ctx != NULL)
        SSL_CTX_free(pool->_ssl_ctx);

    if (pool->_interval_cb.loop != NULL)
        h2o_socketpool_unregister_loop(pool, pool->_interval_cb.loop);

    for (i = 0; i < pool->targets.size; i++) {
        h2o_socketpool_destroy_target(pool->targets.entries[i]);
    }
    free(pool->targets.entries);
}
Example #2
0
File: proxy.c Project: devnexen/h2o
static void on_context_dispose(h2o_handler_t *_self, h2o_context_t *ctx)
{
    struct rp_handler_t *self = (void *)_self;
    struct rp_handler_context_t *handler_ctx = h2o_context_get_handler_context(ctx, &self->super);

    if (handler_ctx->client_ctx != NULL)
        free(handler_ctx->client_ctx);

    h2o_socketpool_unregister_loop(self->sockpool, ctx->loop);
}