shm: make shmId also available as uint64_t

This commit is contained in:
Alexey Rybalchenko
2021-03-02 11:39:25 +01:00
parent 0fd2fcadc2
commit edbdc57332
4 changed files with 24 additions and 17 deletions

View File

@@ -11,6 +11,7 @@
#include <picosha2.h>
#include <atomic>
#include <sstream>
#include <string>
#include <functional> // std::equal_to
@@ -194,15 +195,25 @@ struct RegionBlock
// find id for unique shmem name:
// a hash of user id + session id, truncated to 8 characters (to accommodate for name size limit on some systems (MacOS)).
inline std::string buildShmIdFromSessionIdAndUserId(const std::string& sessionId)
inline std::string makeShmIdStr(const std::string& sessionId)
{
std::string seed((std::to_string(geteuid()) + sessionId));
// generate a 8-digit hex value out of sha256 hash
std::vector<unsigned char> hash(4);
picosha2::hash256(seed.begin(), seed.end(), hash.begin(), hash.end());
std::string shmId = picosha2::bytes_to_hex_string(hash.begin(), hash.end());
return shmId;
return picosha2::bytes_to_hex_string(hash.begin(), hash.end());
}
inline uint64_t makeShmIdUint64(const std::string& sessionId)
{
std::string shmId = makeShmIdStr(sessionId);
uint64_t id = 0;
std::stringstream ss;
ss << std::hex << shmId;
ss >> id;
return id;
}
struct SegmentSize : public boost::static_visitor<size_t>