Description
in src/general.c, S3_initialize and S3_deinitialize using initializeCountG to decide whether s3 need to initialize or deinitialize, it will cause curl aborted issue when create multithread clients.
suggest:
`#include <ctype.h>
#include <string.h>
#include "request.h"
#include "simplexml.h"
#include "util.h"
#include "pthread.h"
static int initializeCountG = 0;
pthread_mutex_t initializeGlbMutex = PTHREAD_MUTEX_INITIALIZER;
S3Status S3_initialize(const char *userAgentInfo, int flags,
const char *defaultS3HostName)
{
pthread_mutex_lock(&initializeGlbMutex);
if (initializeCountG++) {
pthread_mutex_unlock(&initializeGlbMutex);
return S3StatusOK;
}
pthread_mutex_unlock(&initializeGlbMutex);
return request_api_initialize(userAgentInfo, flags, defaultS3HostName);
}
void S3_deinitialize()
{
pthread_mutex_lock(&initializeGlbMutex);
if (--initializeCountG) {
pthread_mutex_unlock(&initializeGlbMutex);
return;
}
pthread_mutex_unlock(&initializeGlbMutex);
request_api_deinitialize();
}`