int ukey_startup(ukey_uint64 twepoch, int worker_id, int datacenter_id) { /* _ctx = malloc(sizeof(ukey_context_t)); */ locker = locker_open(UKEY_LOCK_FILE); if (locker == -1) { return -1; } _ctx = (ukey_context_t *)mmap(NULL, sizeof(ukey_context_t), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANON, -1, 0); if (!_ctx) { locker_destroy(locker); return -1; } _ctx->twepoch = twepoch; _ctx->worker_id = worker_id; _ctx->datacenter_id = datacenter_id; _ctx->sequence = 0; _ctx->last_timestamp = -1; _ctx->worker_id_bits = 5; _ctx->datacenter_id_bits = 5; _ctx->sequence_bits = 12; _ctx->worker_id_shift = _ctx->sequence_bits; _ctx->datacenter_id_shift = _ctx->sequence_bits + _ctx->worker_id_bits; _ctx->timestamp_left_shift = _ctx->sequence_bits + _ctx->worker_id_bits + _ctx->datacenter_id_bits; _ctx->sequence_mask = -1 ^ (-1 << _ctx->sequence_bits); return 0; }
void router_destroy(struct router_t* router) { if (router->rbtree.node) rbtree_destroy(router->rbtree.node); locker_destroy(&router->locker); free(router); }
static void dlist_destroy_locker(DList* thiz) { if(thiz->locker != NULL) { locker_unlock(thiz->locker); locker_destroy(thiz->locker); } return; }
int rtp_queue_destroy(void* queue) { struct rtp_queue *q; struct rtp_frame *frame, *next; if(!queue) return -1; q = (struct rtp_queue *)queue; for(frame = q->head; frame; frame = next) { next = frame->next; free(frame); } locker_destroy(&q->locker); free(q); return 0; }
void ukey_shutdown() { locker_destroy(locker); munmap(_ctx, sizeof(ukey_context_t)); }