コード例 #1
0
/**
 * Actually free the resources allocated by the dset (and all its entries).
 * Called by some other functions in libcouchbase
 */
void lcb_durability_dset_destroy(lcb_durability_set_t *dset)
{
    lcb_size_t ii;
    lcb_t instance = dset->instance;

    if (dset->timer) {
        lcb_io_opt_t io = instance->settings.io;
        io->v.v0.delete_timer(io, dset->timer);
        io->v.v0.destroy_timer(io, dset->timer);
        dset->timer = NULL;
    }

    for (ii = 0; ii < dset->nentries; ii++) {
        lcb_durability_entry_t *ent = dset->entries + ii;
        free((void *)REQFLD(ent, key));
    }

    hashset_remove(dset->instance->durability_polls, dset);

    if (dset->nentries > 1) {
        if (dset->ht) {
            genhash_free(dset->ht);
        }
        free(dset->entries);
        free(dset->valid_entries);
    }

    free(dset);
    lcb_maybe_breakout(instance);
}
コード例 #2
0
ファイル: cproxy_front.c プロジェクト: bcui6611/moxi
void mcache_stop(mcache *m) {
    assert(m);

    if (m->lock) {
        cb_mutex_enter(m->lock);
    }

    genhash_t *x = m->map;

    m->map         = NULL;
    m->max         = 0;
    m->lru_head    = NULL;
    m->lru_tail    = NULL;
    m->oldest_live = 0;

    if (m->lock) {
        cb_mutex_exit(m->lock);
    }

    /* Destroying hash table outside the lock. */

    if (x != NULL) {
        genhash_free(x);
    }
}
コード例 #3
0
ファイル: hashtest.c プロジェクト: dustin/genhash
static void
test_construct()
{
    genhash_t* h=NULL;

    h=genhash_init(4, get_string_hash_ops());
    genhash_free(h);
}
コード例 #4
0
ファイル: hashtest.c プロジェクト: dustin/genhash
static void
test_clear()
{
    genhash_t* h=get_test_hash();
    assert(genhash_size(h) == 26);
    genhash_clear(h);
    assert(genhash_size(h) == 0);
    genhash_free(h);
}
コード例 #5
0
ファイル: mock_engine.c プロジェクト: CaptTofu/bucket_engine
static void mock_destroy(ENGINE_HANDLE* handle) {
    struct mock_engine* se = get_handle(handle);

    if (se->initialized) {
        se->initialized = false;
        genhash_free(se->hashtbl);
        free(se);
    }
}
コード例 #6
0
ファイル: topkeys.c プロジェクト: mohyt/memcached
void topkeys_free(topkeys_t *tk) {
    pthread_mutex_destroy(&tk->mutex);
    genhash_free(tk->hash);
    dlist_t *p = tk->list.next;
    while (p != &tk->list) {
        dlist_t *tmp = p->next;
        free(p);
        p = tmp;
    }
}
コード例 #7
0
ファイル: hashtest.c プロジェクト: dustin/genhash
static void
test_update()
{
    genhash_t* h=get_test_hash();
    int type=0, i=0;

    for(i=0; i<26; i++) {
        assert_hash_val(kvs[i], h, kvs[i]);
        type=genhash_update(h, kvs[i], "updated");
        assert(type == MODIFICATION);
        assert_hash_val("updated", h, kvs[i]);
    }
    type=genhash_update(h, "newtest", "new");
    assert(type == NEW);
    assert_hash_val("new", h, "newtest");

    genhash_free(h);
}
コード例 #8
0
ファイル: hashtest.c プロジェクト: dustin/genhash
static void
test_simple()
{
    genhash_t* h=get_test_hash();
    int i=0;

    for(i=0; i<13; i++) {
        int deleted=genhash_delete(h, kvs[i*2]);
        assert(deleted == 1);
        deleted=genhash_delete(h, kvs[i*2]);
        assert(deleted == 0);
    }
    for(i=0; i<26; i++) {
        if(i % 2 == 0) {
            assert_hash_val(NULL, h, kvs[i]);
        } else {
            assert_hash_val(kvs[i], h, kvs[i]);
        }
    }
    genhash_free(h);
}
コード例 #9
0
ファイル: hashtest.c プロジェクト: dustin/genhash
static void
test_function_update()
{
    genhash_t* h=genhash_init(4, get_string_hash_ops());
    int type=0;

    assert_hash_val(NULL, h, "x");
    type=genhash_fun_update(h, "x", update_fun, free_str, NULL);
    assert(type == NEW);
    assert_hash_val("", h, "x");
    type=genhash_fun_update(h, "x", update_fun, free_str, NULL);
    assert(type == MODIFICATION);
    assert_hash_val("x", h, "x");
    type=genhash_fun_update(h, "x", update_fun, free_str, NULL);
    assert(type == MODIFICATION);
    assert_hash_val("xx", h, "x");

    assert(genhash_size(h) == 1);

    genhash_free(h);
}
コード例 #10
0
ファイル: hashtest.c プロジェクト: dustin/genhash
static void
test_multiple_keys()
{
    genhash_t* h=genhash_init(1, get_string_hash_ops());
    int deleted = 0, i = 0;

    /* Pollute the space to allow some hash collisions */
    for(i=0; i<16000; i++) {
        char key[8];
        snprintf(key, sizeof(key), "k%d", i);
        genhash_store(h, key, key);
        assert_hash_val(key, h, key);
    }

    assert_hash_val(NULL, h, "x");
    genhash_store(h, "x", "a");
    genhash_store(h, "x", "b");

    assert_hash_val("b", h, "x");
    deleted=genhash_delete(h, "x");
    assert(deleted == 1);
    assert_hash_val("a", h, "x");
    deleted=genhash_delete(h, "x");
    assert(deleted == 1);
    assert_hash_val(NULL, h, "x");
    deleted=genhash_delete(h, "x");
    assert(deleted == 0);

    genhash_store(h, "x", "a");
    genhash_store(h, "x", "b");
    genhash_store(h, "y", "yz");

    assert(genhash_size(h) == 16003);
    assert(genhash_size_for_key(h, "x") == 2);

    deleted=genhash_delete_all(h, "x");
    assert(deleted == 2);

    genhash_free(h);
}
コード例 #11
0
ファイル: durability.c プロジェクト: Sweebr/couchnode
/**
 * Actually free the resources allocated by the dset (and all its entries).
 * Called by some other functions in libcouchbase
 */
void lcb_durability_dset_destroy(lcb_DURSET *dset)
{
    lcb_t instance = dset->instance;

    if (dset->timer) {
        lcbio_TABLE *io = instance->iotable;
        io->timer.cancel(io->p, dset->timer);
        io->timer.destroy(io->p, dset->timer);
        dset->timer = NULL;
    }

    lcb_aspend_del(&dset->instance->pendops, LCB_PENDTYPE_DURABILITY, dset);

    if (dset->nentries > 1) {
        if (dset->ht) {
            genhash_free(dset->ht);
        }
        free(dset->entries);
    }
    lcb_string_release(&dset->kvbufs);

    free(dset);
    lcb_maybe_breakout(instance);
}
コード例 #12
0
ファイル: hashtest.c プロジェクト: dustin/genhash
static void
test_free_null()
{
    genhash_free(NULL);
}
コード例 #13
0
LIBCOUCHBASE_API
void lcb_destroy(lcb_t instance)
{
    lcb_size_t ii;
    lcb_settings *settings = &instance->settings;

    if (instance->cur_configinfo) {
        lcb_clconfig_decref(instance->cur_configinfo);
        instance->cur_configinfo = NULL;
    }
    instance->vbucket_config = NULL;

    lcb_bootstrap_destroy(instance);
    lcb_confmon_destroy(instance->confmon);
    hostlist_destroy(instance->usernodes);

    if (instance->timers != NULL) {
        for (ii = 0; ii < instance->timers->capacity; ++ii) {
            if (instance->timers->items[ii] > 1) {
                lcb_timer_destroy(instance,
                                  (lcb_timer_t)instance->timers->items[ii]);
            }
        }
        hashset_destroy(instance->timers);
    }

    if (instance->durability_polls) {
        struct lcb_durability_set_st **dset_list;
        lcb_size_t nitems = hashset_num_items(instance->durability_polls);
        dset_list = (struct lcb_durability_set_st **)
                    hashset_get_items(instance->durability_polls, NULL);
        if (dset_list) {
            for (ii = 0; ii < nitems; ii++) {
                lcb_durability_dset_destroy(dset_list[ii]);
            }
            free(dset_list);
        }
        hashset_destroy(instance->durability_polls);
    }

    for (ii = 0; ii < instance->nservers; ++ii) {
        lcb_server_destroy(instance->servers + ii);
    }

    if (instance->http_requests) {
        for (ii = 0; ii < instance->http_requests->capacity; ++ii) {
            if (instance->http_requests->items[ii] > 1) {
                lcb_http_request_t htreq =
                    (lcb_http_request_t)instance->http_requests->items[ii];

                /**
                 * We don't want to invoke callbacks *or* remove it from our
                 * hash table
                 */
                htreq->status |= LCB_HTREQ_S_CBINVOKED | LCB_HTREQ_S_HTREMOVED;

                /* we should figure out a better error code for this.. */
                lcb_http_request_finish(instance, htreq, LCB_ERROR);
            }
        }
    }

    hashset_destroy(instance->http_requests);

    free(instance->servers);

    connmgr_destroy(instance->memd_sockpool);

    if (settings->io && settings->io->v.v0.need_cleanup) {
        lcb_destroy_io_ops(settings->io);
    }

    ringbuffer_destruct(&instance->purged_buf);
    ringbuffer_destruct(&instance->purged_cookies);

    free(instance->histogram);
    free(instance->scratch);
    free(settings->username);
    free(settings->password);
    free(settings->bucket);
    free(settings->sasl_mech_force);
    if (instance->cmdht) {
        genhash_free(instance->cmdht);
        instance->cmdht = NULL;
    }

    memset(instance, 0xff, sizeof(*instance));
    free(instance);
}