Ejemplo n.º 1
0
static thread_data *check_thread_data_create(rmtContext *ctx)
{
    thread_data *cdata;
    int setsize = 100;

    cdata = rmt_alloc(sizeof(*cdata));
    if (cdata == NULL) {
        log_error("ERROR: out of memory");
        return NULL;
    }

    thread_data_init(cdata);

    cdata->ctx = ctx;

    cdata->srgroup = source_group_create(ctx);
    if(cdata->srgroup == NULL){
        log_error("Error: source redis group create failed.");
        goto error;
    }

    cdata->trgroup = target_group_create(ctx);
    if(cdata->trgroup == NULL){
        log_error("Error: target redis group create failed.");
        goto error;
    }

    /* use the ctx->mbuf_size */
    if (cdata->trgroup->mb != NULL) {
        mbuf_base_destroy(cdata->trgroup->mb);
        cdata->trgroup->mb = mbuf_base_create(
            ctx->mbuf_size, NULL);
        if (cdata->trgroup->mb == NULL) {
            log_error("ERROR: Create mbuf_base failed");
            goto error;
        }
    }

    setsize += ((int)dictSize(cdata->srgroup->nodes)*(1 + 1) + 
        (int)dictSize(cdata->trgroup->nodes)*1)*ctx->thread_count;
    cdata->loop = aeCreateEventLoop(setsize);
    if (cdata->loop == NULL) {
    	log_error("ERROR: create event loop failed");
        goto error;
    }

    cdata->data = rmt_zalloc(sizeof(check_data));
    if (cdata->data == NULL) {
        log_error("Error: out of memory.");
        goto error;
    }

    return cdata;

error:

    check_thread_data_destroy(cdata);

    return NULL;
}
Ejemplo n.º 2
0
static inline ThreadData*
thread_data_get()
{
    VALUE obj = rb_thread_local_aref(rb_thread_current(), id_thread_data);

    if (obj != Qnil && TYPE(obj) == T_DATA) {
        return (ThreadData *) DATA_PTR(obj);
    }

    return thread_data_init();
}
Ejemplo n.º 3
0
static int try_init(machine_t *machine){ // {{{
	try_userdata         *userdata;
	
	if((userdata = machine->userdata = calloc(1, sizeof(try_userdata))) == NULL)
		return error("calloc failed");
	
	userdata->request     = 0; 
	userdata->request_out = 0; 
	userdata->return_to   = HK(return_to);
	
	if((userdata->try_end = malloc(sizeof(machine_t))) == NULL){
		free(userdata);
		return error("malloc failed");
	}
	memcpy(userdata->try_end, &try_end_proto, sizeof(machine_t));
	userdata->try_end->userdata = userdata;
	
	return thread_data_init(
		&userdata->thread_data, 
		(f_thread_create)&try_threaddata_create,
		(f_thread_destroy)&try_threaddata_destroy,
		userdata);
} // }}}
Ejemplo n.º 4
0
static inline ThreadData*
thread_data_get(void)
{
    ThreadData* td = pthread_getspecific(threadDataKey);
    return td != NULL ? td : thread_data_init();
}