summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author彭宣正 <[email protected]>2021-03-15 14:57:59 +0800
committer彭宣正 <[email protected]>2021-03-15 14:57:59 +0800
commite3b908194c5eb0ff043413054f336fee52b7d60a (patch)
tree549f190c598a8da73dda2021d47db13565864d60
parent6afa30a9e2f0a2dfb6f96898f10a808e21679937 (diff)
🐞fix(hos_client_create): 修复hos服务器连接失败导致的内存泄露v1.0.14
-rw-r--r--src/hos_client.cpp40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/hos_client.cpp b/src/hos_client.cpp
index b6009b9f..e20c7230 100644
--- a/src/hos_client.cpp
+++ b/src/hos_client.cpp
@@ -57,7 +57,6 @@ typedef struct fs2_info_s
typedef struct hos_client_handle_s
{
Aws::S3::S3Client *S3Client;
- Aws::SDKOptions options;
Aws::Vector<Aws::S3::Model::Bucket> buckets;
pthread_t fd_thread;
int fd_thread_status;
@@ -75,11 +74,11 @@ typedef struct hos_client_handle_s
#define HOS_FS2_STOP 2
}hos_client_handle_t;
-hos_client_handle hos_handle;//一个进程只允许有一个hos_handle
+hos_client_handle g_hos_handle;//一个进程只允许有一个g_hos_handle
hos_info_t *hash_hos_info[MAX_HOS_CLIENT_THREAD_NUM];
size_t *hos_cache;//记录当前hos缓存了多少数据
size_t fd_info[MAX_HOS_CLIENT_THREAD_NUM][MAX_HOS_CLIENT_FD_NUM + 1]; //fd 实际从3开始, fd[thread_id][0]记录register的fd,fd[thread_id][1]记录inject的fd
-Aws::SDKOptions options;
+Aws::SDKOptions g_options;
static inline size_t get_current_ms()
{
@@ -189,15 +188,15 @@ hos_client_handle hos_client_create(const char *serverip, size_t port, const cha
return NULL;
}
- if (hos_handle)
+ if (g_hos_handle)
{
- hos_handle->count++;
- return hos_handle;
+ g_hos_handle->count++;
+ return g_hos_handle;
}
- Aws::InitAPI(options);
- hos_handle = (hos_client_handle)malloc(sizeof(hos_client_handle_t));
- memset(hos_handle, 0, sizeof(hos_client_handle_t));
+ Aws::InitAPI(g_options);
+ g_hos_handle = (hos_client_handle)malloc(sizeof(hos_client_handle_t));
+ memset(g_hos_handle, 0, sizeof(hos_client_handle_t));
Aws::Client::ClientConfiguration config;
Aws::Auth::AWSCredentials credentials(accesskeyid, secretkey);
@@ -209,28 +208,29 @@ hos_client_handle hos_client_create(const char *serverip, size_t port, const cha
config.enableEndpointDiscovery = true;
config.executor = std::shared_ptr<Aws::Utils::Threading::PooledThreadExecutor>(std::make_shared<Aws::Utils::Threading::PooledThreadExecutor>(pool_size, Aws::Utils::Threading::OverflowPolicy::REJECT_IMMEDIATELY));//支持线程池
- hos_handle->S3Client = new Aws::S3::S3Client(credentials, config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
- hos_handle->options = options;
+ g_hos_handle->S3Client = new Aws::S3::S3Client(credentials, config, Aws::Client::AWSAuthV4Signer::PayloadSigningPolicy::Never, false);
/* 获取当前用户的所有的buckets */
- Aws::S3::Model::ListBucketsOutcome outcome = hos_handle->S3Client->ListBuckets();
+ Aws::S3::Model::ListBucketsOutcome outcome = g_hos_handle->S3Client->ListBuckets();
if (!outcome.IsSuccess())
{
+ delete g_hos_handle->S3Client;
+ Aws::ShutdownAPI(g_options);
return NULL;
}
- hos_handle->buckets = outcome.GetResult().GetBuckets();
- hos_handle->cache_size = 0;
- hos_handle->cache_count = 0;
- hos_handle->thread_sum = 1;
- hos_handle->timeout = 1000;
- hos_handle->count++;
+ g_hos_handle->buckets = outcome.GetResult().GetBuckets();
+ g_hos_handle->cache_size = 0;
+ g_hos_handle->cache_count = 0;
+ g_hos_handle->thread_sum = 1;
+ g_hos_handle->timeout = 1000;
+ g_hos_handle->count++;
fd_info[0][0] = 65533;
fd_info[0][1] = 0;
fd_info[0][2] = 0;
- return hos_handle;
+ return g_hos_handle;
}
static void *fs2_statistics(void *ptr)
@@ -959,7 +959,7 @@ int hos_client_destory(hos_client_handle handle)
}
free(handle);
- Aws::ShutdownAPI(options);
+ Aws::ShutdownAPI(g_options);
return HOS_CLIENT_OK;
}