Added new class for curl share handle
Added new class for curl share handle. And, paired the curl handle(S3fsCurl) with the worker thread. Changed that each thread has its own SSL session cache to prevent data races. So OpenSSL suppression for ThreadSanitizer is no longer necessary, so reverted it.
This commit is contained in:
committed by
Andrew Gaul
parent
bfc3ea767a
commit
956e8c5750
@ -28,6 +28,8 @@
|
||||
|
||||
#include "s3fs_logger.h"
|
||||
#include "threadpoolman.h"
|
||||
#include "curl.h"
|
||||
#include "curl_share.h"
|
||||
|
||||
//------------------------------------------------
|
||||
// ThreadPoolMan class variables
|
||||
@ -105,6 +107,9 @@ void ThreadPoolMan::Worker(ThreadPoolMan* psingleton, std::promise<int> promise)
|
||||
}
|
||||
S3FS_PRN_INFO3("Start worker thread in ThreadPoolMan.");
|
||||
|
||||
// The only object in this thread worker
|
||||
S3fsCurl s3fscurl(true);
|
||||
|
||||
while(!psingleton->IsExit()){
|
||||
// wait
|
||||
psingleton->thpoolman_sem.acquire();
|
||||
@ -113,6 +118,12 @@ void ThreadPoolMan::Worker(ThreadPoolMan* psingleton, std::promise<int> promise)
|
||||
break;
|
||||
}
|
||||
|
||||
// reset curl handle
|
||||
if(!s3fscurl.CreateCurlHandle(true)){
|
||||
S3FS_PRN_ERR("Failed to re-create curl handle.");
|
||||
break;
|
||||
}
|
||||
|
||||
// get instruction
|
||||
thpoolman_param param;
|
||||
{
|
||||
@ -127,8 +138,9 @@ void ThreadPoolMan::Worker(ThreadPoolMan* psingleton, std::promise<int> promise)
|
||||
}
|
||||
}
|
||||
|
||||
void* retval = param.pfunc(param.args);
|
||||
if(nullptr != retval){
|
||||
// run function
|
||||
void* retval;
|
||||
if(nullptr != (retval = param.pfunc(s3fscurl, param.args))){
|
||||
S3FS_PRN_WARN("The instruction function returned with something error code(%ld).", reinterpret_cast<long>(retval));
|
||||
}
|
||||
if(param.psem){
|
||||
@ -136,6 +148,10 @@ void ThreadPoolMan::Worker(ThreadPoolMan* psingleton, std::promise<int> promise)
|
||||
}
|
||||
}
|
||||
|
||||
if(!S3fsCurlShare::DestroyCurlShareHandleForThread()){
|
||||
S3FS_PRN_WARN("Failed to destory curl share handle for this thread, but continue...");
|
||||
}
|
||||
|
||||
promise.set_value(0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user