非结构化接口线程安全
This commit is contained in:
33
cache/cache_evbase_client.cpp
vendored
33
cache/cache_evbase_client.cpp
vendored
@@ -23,6 +23,7 @@ enum CACHE_ASYN_CMD
|
||||
CACHE_ASYN_FETCH=0,
|
||||
CACHE_ASYN_UPLOAD_ONCE_DATA,
|
||||
CACHE_ASYN_UPLOAD_ONCE_EVBUF,
|
||||
CACHE_ASYN_UPLOAD_START,
|
||||
CACHE_ASYN_UPLOAD_FRAG_DATA,
|
||||
CACHE_ASYN_UPLOAD_FRAG_EVBUF,
|
||||
CACHE_ASYN_UPLOAD_END,
|
||||
@@ -172,6 +173,11 @@ static void cache_asyn_ioevent_dispatch(struct databuffer *buffer)
|
||||
evbuffer_free(buffer->evbuf);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_START:
|
||||
ctx_asyn->ctx->instance->statistic.put_recv_num += 1;
|
||||
ctx_asyn->ctx->instance->error_code = CACHE_OK;
|
||||
break;
|
||||
|
||||
case CACHE_ASYN_UPLOAD_FRAG_DATA:
|
||||
tango_cache_update_frag_data(ctx_asyn->ctx, buffer->data, buffer->size);
|
||||
@@ -292,7 +298,7 @@ int cache_evbase_update_frag_data(struct cache_evbase_ctx *ctx_asyn, enum PUT_ME
|
||||
}
|
||||
free(buffer->data);
|
||||
free(buffer);
|
||||
return -1;
|
||||
return -2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -320,7 +326,7 @@ int cache_evbase_update_frag_evbuf(struct cache_evbase_ctx *ctx_asyn, struct evb
|
||||
}
|
||||
evbuffer_free(buffer->evbuf);
|
||||
free(buffer);
|
||||
return -1;
|
||||
return -2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -329,8 +335,9 @@ struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance
|
||||
{
|
||||
struct cache_evbase_ctx *ctx_asyn;
|
||||
struct tango_cache_ctx *ctx;
|
||||
struct databuffer *buffer;
|
||||
|
||||
ctx = tango_cache_update_start(instance->instance, future, meta);
|
||||
ctx = tango_cache_update_prepare(instance->instance, future, meta);
|
||||
if(ctx == NULL)
|
||||
{
|
||||
return NULL;
|
||||
@@ -340,6 +347,19 @@ struct cache_evbase_ctx *cache_evbase_update_start(struct cache_evbase_instance
|
||||
ctx_asyn->instance_asyn = instance;
|
||||
ctx_asyn->ctx = ctx;
|
||||
|
||||
buffer = (struct databuffer *)malloc(sizeof(struct databuffer));
|
||||
buffer->ctx_asyn = ctx_asyn;
|
||||
buffer->cmd_type = CACHE_ASYN_UPLOAD_START;
|
||||
|
||||
//<2F>¼<EFBFBD>֪ͨ<CDA8><D6AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD>Ϣ
|
||||
if(iothread_notify_event(instance->notify_sendfd, &buffer, sizeof(void *), 0) != sizeof(void *))
|
||||
{
|
||||
ctx_asyn->ctx->fail_state = true;
|
||||
tango_cache_ctx_destroy(ctx_asyn->ctx);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
free(buffer);
|
||||
return NULL;
|
||||
}
|
||||
return ctx_asyn;
|
||||
}
|
||||
|
||||
@@ -382,9 +402,10 @@ int cache_evbase_upload_once_data(struct cache_evbase_instance *instance, struct
|
||||
{
|
||||
free(buffer->data);
|
||||
free(buffer);
|
||||
ctx_asyn->ctx->fail_state = true;
|
||||
tango_cache_ctx_destroy(ctx);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
return -1;
|
||||
return -2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -420,9 +441,10 @@ int cache_evbase_upload_once_evbuf(struct cache_evbase_instance *instance, struc
|
||||
{
|
||||
evbuffer_free(buffer->evbuf);
|
||||
free(buffer);
|
||||
ctx_asyn->ctx->fail_state = true;
|
||||
tango_cache_ctx_destroy(ctx);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
return -1;
|
||||
return -2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -465,6 +487,7 @@ int cache_evbase_delete_object(struct cache_evbase_instance *instance, struct fu
|
||||
|
||||
if(iothread_notify_event(instance->notify_sendfd, &buffer, sizeof(void *), 0) != sizeof(void *))
|
||||
{
|
||||
ctx_asyn->ctx->fail_state = true;
|
||||
tango_cache_ctx_destroy(ctx_asyn->ctx);
|
||||
cache_asyn_ctx_destroy(ctx_asyn);
|
||||
free(buffer);
|
||||
|
||||
Reference in New Issue
Block a user