summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhangchengwei <[email protected]>2018-12-14 19:26:31 +0800
committerzhengchao <[email protected]>2018-12-21 11:09:31 +0600
commit1059af3c72c8b40d3edb08587ce1119bf7e3747b (patch)
tree385f8dc35bbea4a7b502c529e5781734ee802a84
parentd24c57ce85170dbd38627f63c28c8e805d9fc4f6 (diff)
修复内存泄露
-rw-r--r--cache/src/tango_cache_client.cpp2
-rw-r--r--cache/test/cache_evbase_benchmark.cpp20
-rw-r--r--cache/test/tango_cache_test.cpp15
3 files changed, 29 insertions, 8 deletions
diff --git a/cache/src/tango_cache_client.cpp b/cache/src/tango_cache_client.cpp
index 7010e8b..032ce61 100644
--- a/cache/src/tango_cache_client.cpp
+++ b/cache/src/tango_cache_client.cpp
@@ -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);
diff --git a/cache/test/cache_evbase_benchmark.cpp b/cache/test/cache_evbase_benchmark.cpp
index d245244..e3744f6 100644
--- a/cache/test/cache_evbase_benchmark.cpp
+++ b/cache/test/cache_evbase_benchmark.cpp
@@ -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;
}
diff --git a/cache/test/tango_cache_test.cpp b/cache/test/tango_cache_test.cpp
index 00ba43c..fb7f618 100644
--- a/cache/test/tango_cache_test.cpp
+++ b/cache/test/tango_cache_test.cpp
@@ -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