mirror of
https://github.com/s3fs-fuse/s3fs-fuse.git
synced 2024-12-23 01:08:54 +00:00
Make some methods and parameters const (#2078)
This requires making some locks mutable.
This commit is contained in:
parent
14eb1a7fd8
commit
0ba49518e9
@ -334,7 +334,7 @@ bool StatCache::IsNoObjectCache(const std::string& key, bool overcheck)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool StatCache::AddStat(const std::string& key, headers_t& meta, bool forcedir, bool no_truncate)
|
||||
bool StatCache::AddStat(const std::string& key, const headers_t& meta, bool forcedir, bool no_truncate)
|
||||
{
|
||||
if(!no_truncate && CacheSize< 1){
|
||||
return true;
|
||||
@ -372,7 +372,7 @@ bool StatCache::AddStat(const std::string& key, headers_t& meta, bool forcedir,
|
||||
ent->meta.clear();
|
||||
SetStatCacheTime(ent->cache_date); // Set time.
|
||||
//copy only some keys
|
||||
for(headers_t::iterator iter = meta.begin(); iter != meta.end(); ++iter){
|
||||
for(headers_t::const_iterator iter = meta.begin(); iter != meta.end(); ++iter){
|
||||
std::string tag = lower(iter->first);
|
||||
std::string value = iter->second;
|
||||
if(tag == "content-type"){
|
||||
|
@ -163,7 +163,7 @@ class StatCache
|
||||
bool AddNoObjectCache(const std::string& key);
|
||||
|
||||
// Add stat cache
|
||||
bool AddStat(const std::string& key, headers_t& meta, bool forcedir = false, bool no_truncate = false);
|
||||
bool AddStat(const std::string& key, const headers_t& meta, bool forcedir = false, bool no_truncate = false);
|
||||
|
||||
// Update meta stats
|
||||
bool UpdateMetaStats(const std::string& key, headers_t& meta);
|
||||
|
@ -1988,7 +1988,7 @@ bool S3fsCurl::SetUseAhbe(bool ahbe)
|
||||
return old;
|
||||
}
|
||||
|
||||
bool S3fsCurl::GetResponseCode(long& responseCode, bool from_curl_handle)
|
||||
bool S3fsCurl::GetResponseCode(long& responseCode, bool from_curl_handle) const
|
||||
{
|
||||
responseCode = -1;
|
||||
|
||||
|
@ -339,7 +339,7 @@ class S3fsCurl
|
||||
bool GetIAMCredentials(const char* cred_url, const char* iam_v2_token, const char* ibm_secret_access_key, std::string& response);
|
||||
bool GetIAMRoleFromMetaData(const char* cred_url, const char* iam_v2_token, std::string& token);
|
||||
bool AddSseRequestHead(sse_type_t ssetype, const std::string& ssevalue, bool is_only_c, bool is_copy);
|
||||
bool GetResponseCode(long& responseCode, bool from_curl_handle = true);
|
||||
bool GetResponseCode(long& responseCode, bool from_curl_handle = true) const;
|
||||
int RequestPerform(bool dontAddAuthHeaders=false);
|
||||
int DeleteRequest(const char* tpath);
|
||||
int GetIAMv2ApiToken(const char* token_url, int token_ttl, const char* token_ttl_hdr, std::string& response);
|
||||
@ -371,9 +371,9 @@ class S3fsCurl
|
||||
std::string GetSpecialSavedPath() const { return saved_path; }
|
||||
std::string GetUrl() const { return url; }
|
||||
std::string GetOp() const { return op; }
|
||||
headers_t* GetResponseHeaders() { return &responseHeaders; }
|
||||
BodyData* GetBodyData() { return &bodydata; }
|
||||
BodyData* GetHeadData() { return &headdata; }
|
||||
const headers_t* GetResponseHeaders() const { return &responseHeaders; }
|
||||
const BodyData* GetBodyData() const { return &bodydata; }
|
||||
const BodyData* GetHeadData() const { return &headdata; }
|
||||
CURLcode GetCurlCode() const { return curlCode; }
|
||||
long GetLastResponseCode() const { return LastResponseCode; }
|
||||
bool SetUseAhbe(bool ahbe);
|
||||
|
@ -62,7 +62,7 @@ class S3fsMultiCurl
|
||||
explicit S3fsMultiCurl(int maxParallelism);
|
||||
~S3fsMultiCurl();
|
||||
|
||||
int GetMaxParallelism() { return maxParallelism; }
|
||||
int GetMaxParallelism() const { return maxParallelism; }
|
||||
|
||||
S3fsMultiSuccessCallback SetSuccessCallback(S3fsMultiSuccessCallback function);
|
||||
S3fsMultiNotFoundCallback SetNotFoundCallback(S3fsMultiNotFoundCallback function);
|
||||
|
@ -28,7 +28,6 @@ class sse_type_t;
|
||||
//----------------------------------------------
|
||||
// Functions
|
||||
//----------------------------------------------
|
||||
std::string GetContentMD5(int fd);
|
||||
struct curl_slist* curl_slist_sort_insert(struct curl_slist* list, const char* data);
|
||||
struct curl_slist* curl_slist_sort_insert(struct curl_slist* list, const char* key, const char* value);
|
||||
struct curl_slist* curl_slist_remove(struct curl_slist* list, const char* key);
|
||||
|
@ -196,7 +196,7 @@ void FdEntity::Clear()
|
||||
// The return value is the same as the class method GetInode().
|
||||
// The caller must have exclusive control.
|
||||
//
|
||||
ino_t FdEntity::GetInode()
|
||||
ino_t FdEntity::GetInode() const
|
||||
{
|
||||
if(cachepath.empty()){
|
||||
S3FS_PRN_INFO("cache file path is empty, then return inode as 0.");
|
||||
@ -298,7 +298,7 @@ int FdEntity::OpenPseudoFd(int flags, AutoLock::Type locktype)
|
||||
return pseudo_fd;
|
||||
}
|
||||
|
||||
int FdEntity::GetOpenCount(AutoLock::Type locktype)
|
||||
int FdEntity::GetOpenCount(AutoLock::Type locktype) const
|
||||
{
|
||||
AutoLock auto_lock(&fdent_lock, locktype);
|
||||
|
||||
@ -362,7 +362,7 @@ int FdEntity::OpenMirrorFile()
|
||||
return mirrorfd;
|
||||
}
|
||||
|
||||
bool FdEntity::FindPseudoFd(int fd, AutoLock::Type locktype)
|
||||
bool FdEntity::FindPseudoFd(int fd, AutoLock::Type locktype) const
|
||||
{
|
||||
AutoLock auto_lock(&fdent_lock, locktype);
|
||||
|
||||
@ -777,7 +777,7 @@ bool FdEntity::IsModified() const
|
||||
return pagelist.IsModified();
|
||||
}
|
||||
|
||||
bool FdEntity::GetStats(struct stat& st, AutoLock::Type locktype)
|
||||
bool FdEntity::GetStats(struct stat& st, AutoLock::Type locktype) const
|
||||
{
|
||||
AutoLock auto_lock(&fdent_lock, locktype);
|
||||
if(-1 == physical_fd){
|
||||
@ -976,7 +976,7 @@ bool FdEntity::ClearHoldingMtime(AutoLock::Type locktype)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FdEntity::GetSize(off_t& size)
|
||||
bool FdEntity::GetSize(off_t& size) const
|
||||
{
|
||||
AutoLock auto_lock(&fdent_lock);
|
||||
if(-1 == physical_fd){
|
||||
@ -988,7 +988,7 @@ bool FdEntity::GetSize(off_t& size)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FdEntity::GetXattr(std::string& xattr)
|
||||
bool FdEntity::GetXattr(std::string& xattr) const
|
||||
{
|
||||
AutoLock auto_lock(&fdent_lock);
|
||||
|
||||
@ -2531,7 +2531,7 @@ bool FdEntity::AddUntreated(off_t start, off_t size)
|
||||
return result;
|
||||
}
|
||||
|
||||
bool FdEntity::GetLastUpdateUntreatedPart(off_t& start, off_t& size)
|
||||
bool FdEntity::GetLastUpdateUntreatedPart(off_t& start, off_t& size) const
|
||||
{
|
||||
// Get last untreated area
|
||||
if(!untreated_list.GetLastUpdatePart(start, size)){
|
||||
|
@ -49,7 +49,7 @@ class FdEntity
|
||||
static bool mixmultipart; // whether multipart uploading can use copy api.
|
||||
static bool streamupload; // whether stream uploading.
|
||||
|
||||
pthread_mutex_t fdent_lock;
|
||||
mutable pthread_mutex_t fdent_lock;
|
||||
bool is_lock_init;
|
||||
std::string path; // object path
|
||||
int physical_fd; // physical file(cache or temporary file) descriptor
|
||||
@ -73,7 +73,7 @@ class FdEntity
|
||||
static ino_t GetInode(int fd);
|
||||
|
||||
void Clear();
|
||||
ino_t GetInode();
|
||||
ino_t GetInode() const;
|
||||
int OpenMirrorFile();
|
||||
int NoCacheLoadAndPost(PseudoFdInfo* pseudo_obj, off_t start = 0, off_t size = 0); // size=0 means loading to end
|
||||
PseudoFdInfo* CheckPseudoFdFlags(int fd, bool writable, AutoLock::Type locktype = AutoLock::NONE);
|
||||
@ -105,12 +105,12 @@ class FdEntity
|
||||
|
||||
void Close(int fd);
|
||||
bool IsOpen() const { return (-1 != physical_fd); }
|
||||
bool FindPseudoFd(int fd, AutoLock::Type locktype = AutoLock::NONE);
|
||||
bool FindPseudoFd(int fd, AutoLock::Type locktype = AutoLock::NONE) const;
|
||||
int Open(const headers_t* pmeta, off_t size, const struct timespec& ts_mctime, int flags, AutoLock::Type type);
|
||||
bool LoadAll(int fd, headers_t* pmeta = NULL, off_t* size = NULL, bool force_load = false);
|
||||
int Dup(int fd, AutoLock::Type locktype = AutoLock::NONE);
|
||||
int OpenPseudoFd(int flags = O_RDONLY, AutoLock::Type locktype = AutoLock::NONE);
|
||||
int GetOpenCount(AutoLock::Type locktype = AutoLock::NONE);
|
||||
int GetOpenCount(AutoLock::Type locktype = AutoLock::NONE) const;
|
||||
const char* GetPath() const { return path.c_str(); }
|
||||
bool RenamePath(const std::string& newpath, std::string& fentmapkey);
|
||||
int GetPhysicalFd() const { return physical_fd; }
|
||||
@ -118,7 +118,7 @@ class FdEntity
|
||||
bool MergeOrgMeta(headers_t& updatemeta);
|
||||
int UploadPending(int fd, AutoLock::Type type);
|
||||
|
||||
bool GetStats(struct stat& st, AutoLock::Type locktype = AutoLock::NONE);
|
||||
bool GetStats(struct stat& st, AutoLock::Type locktype = AutoLock::NONE) const;
|
||||
int SetCtime(struct timespec time, AutoLock::Type locktype = AutoLock::NONE);
|
||||
int SetAtime(struct timespec time, AutoLock::Type locktype = AutoLock::NONE);
|
||||
int SetMCtime(struct timespec mtime, struct timespec ctime, AutoLock::Type locktype = AutoLock::NONE);
|
||||
@ -128,8 +128,8 @@ class FdEntity
|
||||
bool UpdateMCtime();
|
||||
bool SetHoldingMtime(struct timespec mtime, AutoLock::Type locktype = AutoLock::NONE);
|
||||
bool ClearHoldingMtime(AutoLock::Type locktype = AutoLock::NONE);
|
||||
bool GetSize(off_t& size);
|
||||
bool GetXattr(std::string& xattr);
|
||||
bool GetSize(off_t& size) const;
|
||||
bool GetXattr(std::string& xattr) const;
|
||||
bool SetXattr(const std::string& xattr);
|
||||
bool SetMode(mode_t mode);
|
||||
bool SetUId(uid_t uid);
|
||||
@ -150,7 +150,7 @@ class FdEntity
|
||||
|
||||
void MarkDirtyNewFile();
|
||||
|
||||
bool GetLastUpdateUntreatedPart(off_t& start, off_t& size);
|
||||
bool GetLastUpdateUntreatedPart(off_t& start, off_t& size) const;
|
||||
bool ReplaceLastUpdateUntreatedPart(off_t front_start, off_t front_size, off_t behind_start, off_t behind_size);
|
||||
};
|
||||
|
||||
|
@ -302,7 +302,7 @@ bool PseudoFdInfo::GetUploadId(std::string& id) const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PseudoFdInfo::GetEtaglist(etaglist_t& list)
|
||||
bool PseudoFdInfo::GetEtaglist(etaglist_t& list) const
|
||||
{
|
||||
if(!IsUploading()){
|
||||
S3FS_PRN_ERR("Multipart Upload has not started yet.");
|
||||
|
@ -66,7 +66,7 @@ class PseudoFdInfo
|
||||
filepart_list_t upload_list;
|
||||
petagpool etag_entities; // list of etag string and part number entities(to maintain the etag entity even if MPPART_INFO is destroyed)
|
||||
bool is_lock_init;
|
||||
pthread_mutex_t upload_list_lock; // protects upload_id and upload_list
|
||||
mutable pthread_mutex_t upload_list_lock; // protects upload_id and upload_list
|
||||
Semaphore uploaded_sem; // use a semaphore to trigger an upload completion like event flag
|
||||
volatile int instruct_count; // number of instructions for processing by threads
|
||||
volatile int completed_count; // number of completed processes by thread
|
||||
@ -103,7 +103,7 @@ class PseudoFdInfo
|
||||
|
||||
bool IsUploading() const { return !upload_id.empty(); }
|
||||
bool GetUploadId(std::string& id) const;
|
||||
bool GetEtaglist(etaglist_t& list);
|
||||
bool GetEtaglist(etaglist_t& list) const;
|
||||
|
||||
bool AppendUploadPart(off_t start, off_t size, bool is_copy = false, etagpair** ppetag = NULL);
|
||||
|
||||
|
@ -99,7 +99,7 @@ bool UntreatedParts::AddPart(off_t start, off_t size)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool UntreatedParts::RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart)
|
||||
bool UntreatedParts::RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart) const
|
||||
{
|
||||
if(max_size <= 0 || min_size < 0 || max_size < min_size){
|
||||
S3FS_PRN_ERR("Paramter are wrong(max_size=%lld, min_size=%lld).", static_cast<long long int>(max_size), static_cast<long long int>(min_size));
|
||||
@ -108,7 +108,7 @@ bool UntreatedParts::RowGetPart(off_t& start, off_t& size, off_t max_size, off_t
|
||||
AutoLock auto_lock(&untreated_list_lock);
|
||||
|
||||
// Check the overlap with the existing part and add the part.
|
||||
for(untreated_list_t::iterator iter = untreated_list.begin(); iter != untreated_list.end(); ++iter){
|
||||
for(untreated_list_t::const_iterator iter = untreated_list.begin(); iter != untreated_list.end(); ++iter){
|
||||
if(!lastpart || iter->untreated_tag == last_tag){
|
||||
if(min_size <= iter->size){
|
||||
if(iter->size <= max_size){
|
||||
@ -191,7 +191,7 @@ bool UntreatedParts::ClearParts(off_t start, off_t size)
|
||||
//
|
||||
// Update the last updated Untreated part
|
||||
//
|
||||
bool UntreatedParts::GetLastUpdatePart(off_t& start, off_t& size)
|
||||
bool UntreatedParts::GetLastUpdatePart(off_t& start, off_t& size) const
|
||||
{
|
||||
AutoLock auto_lock(&untreated_list_lock);
|
||||
|
||||
|
@ -30,14 +30,14 @@
|
||||
class UntreatedParts
|
||||
{
|
||||
private:
|
||||
pthread_mutex_t untreated_list_lock; // protects untreated_list
|
||||
mutable pthread_mutex_t untreated_list_lock; // protects untreated_list
|
||||
bool is_lock_init;
|
||||
|
||||
untreated_list_t untreated_list;
|
||||
long last_tag; // [NOTE] Use this to identify the latest updated part.
|
||||
|
||||
private:
|
||||
bool RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart);
|
||||
bool RowGetPart(off_t& start, off_t& size, off_t max_size, off_t min_size, bool lastpart) const;
|
||||
|
||||
public:
|
||||
UntreatedParts();
|
||||
@ -46,12 +46,12 @@ class UntreatedParts
|
||||
bool empty();
|
||||
|
||||
bool AddPart(off_t start, off_t size);
|
||||
bool GetLastUpdatedPart(off_t& start, off_t& size, off_t max_size, off_t min_size = MIN_MULTIPART_SIZE) { return RowGetPart(start, size, max_size, min_size, true); }
|
||||
bool GetLastUpdatedPart(off_t& start, off_t& size, off_t max_size, off_t min_size = MIN_MULTIPART_SIZE) const { return RowGetPart(start, size, max_size, min_size, true); }
|
||||
|
||||
bool ClearParts(off_t start, off_t size);
|
||||
bool ClearAll() { return ClearParts(0, 0); }
|
||||
|
||||
bool GetLastUpdatePart(off_t& start, off_t& size);
|
||||
bool GetLastUpdatePart(off_t& start, off_t& size) const;
|
||||
bool ReplaceLastUpdatePart(off_t start, off_t size);
|
||||
bool RemoveLastUpdatePart();
|
||||
|
||||
|
@ -3112,7 +3112,7 @@ static int list_bucket(const char* path, S3ObjList& head, const char* delimiter,
|
||||
S3FS_PRN_ERR("ListBucketRequest returns with error.");
|
||||
return result;
|
||||
}
|
||||
BodyData* body = s3fscurl.GetBodyData();
|
||||
const BodyData* body = s3fscurl.GetBodyData();
|
||||
|
||||
// xmlDocPtr
|
||||
if(NULL == (doc = xmlReadMemory(body->str(), static_cast<int>(body->size()), "", NULL, 0))){
|
||||
@ -4037,7 +4037,7 @@ static int s3fs_check_service()
|
||||
if(300 <= responseCode && responseCode < 500){
|
||||
|
||||
// check region error(for putting message or retrying)
|
||||
BodyData* body = s3fscurl.GetBodyData();
|
||||
const BodyData* body = s3fscurl.GetBodyData();
|
||||
std::string expectregion;
|
||||
std::string expectendpoint;
|
||||
if(check_region_error(body->str(), body->size(), expectregion)){
|
||||
|
@ -285,7 +285,7 @@ bool S3fsCred::SetAccessKeyWithSessionToken(const char* AccessKeyId, const char*
|
||||
return true;
|
||||
}
|
||||
|
||||
bool S3fsCred::IsSetAccessKeys(AutoLock::Type type)
|
||||
bool S3fsCred::IsSetAccessKeys(AutoLock::Type type) const
|
||||
{
|
||||
AutoLock auto_lock(&token_lock, type);
|
||||
|
||||
@ -321,14 +321,14 @@ bool S3fsCred::SetIAMRole(const char* role, AutoLock::Type type)
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string S3fsCred::GetIAMRole(AutoLock::Type type)
|
||||
std::string S3fsCred::GetIAMRole(AutoLock::Type type) const
|
||||
{
|
||||
AutoLock auto_lock(&token_lock, type);
|
||||
|
||||
return IAM_role;
|
||||
}
|
||||
|
||||
bool S3fsCred::IsSetIAMRole(AutoLock::Type type)
|
||||
bool S3fsCred::IsSetIAMRole(AutoLock::Type type) const
|
||||
{
|
||||
AutoLock auto_lock(&token_lock, type);
|
||||
|
||||
@ -435,7 +435,7 @@ int S3fsCred::SetIMDSVersion(int version, AutoLock::Type type)
|
||||
return old;
|
||||
}
|
||||
|
||||
int S3fsCred::GetIMDSVersion(AutoLock::Type type)
|
||||
int S3fsCred::GetIMDSVersion(AutoLock::Type type) const
|
||||
{
|
||||
AutoLock auto_lock(&token_lock, type);
|
||||
|
||||
@ -455,7 +455,7 @@ bool S3fsCred::SetIAMv2APIToken(const std::string& token, AutoLock::Type type)
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string S3fsCred::GetIAMv2APIToken(AutoLock::Type type)
|
||||
std::string S3fsCred::GetIAMv2APIToken(AutoLock::Type type) const
|
||||
{
|
||||
AutoLock auto_lock(&token_lock, type);
|
||||
|
||||
@ -596,7 +596,7 @@ bool S3fsCred::SetIAMRoleFromMetaData(const char* response, AutoLock::Type type)
|
||||
//
|
||||
// Check passwd file readable
|
||||
//
|
||||
bool S3fsCred::IsReadableS3fsPasswdFile()
|
||||
bool S3fsCred::IsReadableS3fsPasswdFile() const
|
||||
{
|
||||
if(passwd_file.empty()){
|
||||
return false;
|
||||
|
@ -53,7 +53,7 @@ class S3fsCred
|
||||
|
||||
static std::string bucket_name;
|
||||
|
||||
pthread_mutex_t token_lock;
|
||||
mutable pthread_mutex_t token_lock;
|
||||
bool is_lock_init;
|
||||
|
||||
std::string passwd_file;
|
||||
@ -104,7 +104,7 @@ class S3fsCred
|
||||
|
||||
bool SetAccessKey(const char* AccessKeyId, const char* SecretAccessKey, AutoLock::Type type);
|
||||
bool SetAccessKeyWithSessionToken(const char* AccessKeyId, const char* SecretAccessKey, const char * SessionToken, AutoLock::Type type);
|
||||
bool IsSetAccessKeys(AutoLock::Type type);
|
||||
bool IsSetAccessKeys(AutoLock::Type type) const;
|
||||
|
||||
bool SetIsECS(bool flag);
|
||||
bool SetIsUseSessionToken(bool flag);
|
||||
@ -112,20 +112,20 @@ class S3fsCred
|
||||
bool SetIsIBMIAMAuth(bool flag);
|
||||
|
||||
int SetIMDSVersion(int version, AutoLock::Type type);
|
||||
int GetIMDSVersion(AutoLock::Type type);
|
||||
int GetIMDSVersion(AutoLock::Type type) const;
|
||||
|
||||
bool SetIAMv2APIToken(const std::string& token, AutoLock::Type type);
|
||||
std::string GetIAMv2APIToken(AutoLock::Type type);
|
||||
std::string GetIAMv2APIToken(AutoLock::Type type) const;
|
||||
|
||||
bool SetIAMRole(const char* role, AutoLock::Type type);
|
||||
std::string GetIAMRole(AutoLock::Type type);
|
||||
bool IsSetIAMRole(AutoLock::Type type);
|
||||
std::string GetIAMRole(AutoLock::Type type) const;
|
||||
bool IsSetIAMRole(AutoLock::Type type) const;
|
||||
size_t SetIAMFieldCount(size_t field_count);
|
||||
std::string SetIAMCredentialsURL(const char* url);
|
||||
std::string SetIAMTokenField(const char* token_field);
|
||||
std::string SetIAMExpiryField(const char* expiry_field);
|
||||
|
||||
bool IsReadableS3fsPasswdFile();
|
||||
bool IsReadableS3fsPasswdFile() const;
|
||||
bool CheckS3fsPasswdFilePerms();
|
||||
bool ParseS3fsPasswdFile(bucketkvmap_t& resmap);
|
||||
bool ReadS3fsPasswdFile(AutoLock::Type type);
|
||||
|
@ -177,7 +177,7 @@ ThreadPoolMan::~ThreadPoolMan()
|
||||
}
|
||||
}
|
||||
|
||||
bool ThreadPoolMan::IsExit()
|
||||
bool ThreadPoolMan::IsExit() const
|
||||
{
|
||||
AutoLock auto_lock(&thread_exit_flag_lock);
|
||||
return is_exit;
|
||||
|
@ -70,7 +70,7 @@ class ThreadPoolMan
|
||||
thpoolman_params_t instruction_list;
|
||||
|
||||
bool is_exit_flag_init;
|
||||
pthread_mutex_t thread_exit_flag_lock;
|
||||
mutable pthread_mutex_t thread_exit_flag_lock;
|
||||
|
||||
private:
|
||||
static void* Worker(void* arg);
|
||||
@ -78,7 +78,7 @@ class ThreadPoolMan
|
||||
explicit ThreadPoolMan(int count = 1);
|
||||
~ThreadPoolMan();
|
||||
|
||||
bool IsExit();
|
||||
bool IsExit() const;
|
||||
void SetExitFlag(bool exit_flag);
|
||||
|
||||
bool StopThreads();
|
||||
|
Loading…
Reference in New Issue
Block a user