Skip to content

S3_initialize and S3_deinitialize missing mutex in multithread situation #114

Open
@sz-xuejin

Description

@sz-xuejin

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

}`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions