libs3 icon indicating copy to clipboard operation
libs3 copied to clipboard

S3_initialize and S3_deinitialize missing mutex in multithread situation

Open sz-xuejin opened this issue 1 year ago • 0 comments

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();

}`

sz-xuejin avatar Dec 31 '24 02:12 sz-xuejin