修复内存泄露

This commit is contained in:
zhangchengwei
2018-12-14 19:26:31 +08:00
committed by zhengchao
parent d24c57ce85
commit 1059af3c72
3 changed files with 29 additions and 8 deletions

View File

@@ -214,7 +214,7 @@ void tango_cache_ctx_destroy(struct tango_cache_ctx *ctx, bool callback)
case CACHE_REQUEST_PUT:
if(ctx->put.uploadID != NULL) free(ctx->put.uploadID);
if(ctx->put.combine_xml != NULL) free(ctx->put.combine_xml);
if(ctx->put.object_meta == NULL) cJSON_Delete(ctx->put.object_meta);
if(ctx->put.object_meta != NULL) cJSON_Delete(ctx->put.object_meta);
if(ctx->put.evbuf!=NULL)
{
ctx->instance->statistic.memory_used -= evbuffer_get_length(ctx->put.evbuf);

View File

@@ -320,7 +320,11 @@ static void* thread_transfer_cmd(void *arg)
{
object_store_update_frag_data(ctx, PUT_MEM_COPY, filecont.buf+(filecont.len-remain_len), remain_len);
}
object_store_update_end(ctx, pdata->filename, 256);
if(object_store_update_end(ctx, pdata->filename, 256))
{
future_destroy(pdata->future);
free(pdata);
}
break;
case METHOD_HEAD:
@@ -343,7 +347,11 @@ static void* thread_transfer_cmd(void *arg)
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(put_future_success, put_future_failed, pdata);
object_store_upload_once_data(instance_asyn, pdata->future, PUT_MEM_FREE, filecont.buf, filecont.len, &putmeta, pdata->filename, 256);
if(object_store_upload_once_data(instance_asyn, pdata->future, PUT_MEM_COPY, filecont.buf, filecont.len, &putmeta, pdata->filename, 256))
{
future_destroy(pdata->future);
free(pdata);
}
break;
case METHOD_PUTONCEEV:
remain_len = filecont.len;
@@ -365,7 +373,11 @@ static void* thread_transfer_cmd(void *arg)
{
evbuffer_add(evbuf, filecont.buf+(filecont.len-remain_len), remain_len);
}
object_store_upload_once_evbuf(instance_asyn, pdata->future, evbuf, &putmeta, pdata->filename, 256);
if(object_store_upload_once_evbuf(instance_asyn, pdata->future, evbuf, &putmeta, pdata->filename, 256))
{
future_destroy(pdata->future);
free(pdata);
}
break;
default:break;
}
@@ -389,7 +401,7 @@ int main(int argc, char **argv)
if(argc != 6)
{
printf("USAGE: %s <method,1-GET,2-PUT> <file> <threads> <total_num> <limit_session_num>\n", argv[0]);
printf("USAGE: %s <method,1-GET,2-PUT,5-PUTONCE> <file> <threads> <total_num> <limit_session_num>\n", argv[0]);
return -1;
}

View File

@@ -262,7 +262,10 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
pdata = (struct future_pdata *)malloc(sizeof(struct future_pdata));
pdata->future = future_create(put_future_success, put_future_failed, pdata);
tango_cache_upload_once_data(tango_instance, pdata->future, PUT_MEM_FREE, p, filelen, &putmeta, pdata->filename, 256);
if(tango_cache_upload_once_data(tango_instance, pdata->future, PUT_MEM_FREE, p, filelen, &putmeta, pdata->filename, 256))
{
put_future_failed(FUTURE_ERROR_CANCEL, "", pdata);
}
}
else if(!strcasecmp(p, "PUTONCEEV"))
{
@@ -283,7 +286,10 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
evbuffer_add(evbuf, buffer, readlen);
}
fclose(fp);
tango_cache_upload_once_evbuf(tango_instance, pdata->future, EVBUFFER_MOVE, evbuf, &putmeta, pdata->filename, 256);
if(tango_cache_upload_once_evbuf(tango_instance, pdata->future, EVBUFFER_MOVE, evbuf, &putmeta, pdata->filename, 256))
{
put_future_failed(FUTURE_ERROR_CANCEL, "", pdata);
}
}
else if(!strcasecmp(p, "DEL"))
{
@@ -323,7 +329,10 @@ static void dummy_accept_callback(evutil_socket_t fd, short events, void *arg)
tango_cache_update_frag_data(ctx, buffer, n);
}
fclose(fp);
tango_cache_update_end(ctx, pdata->filename, 256);
if(tango_cache_update_end(ctx, pdata->filename, 256))
{
put_future_failed(FUTURE_ERROR_CANCEL, "", pdata);
}
}
}
else