mirror of
https://github.com/trapexit/mergerfs.git
synced 2024-11-22 08:02:22 +08:00
checkpoint
This commit is contained in:
parent
307cd4d2e6
commit
e5aa69a010
59
src/passthrough.cpp
Normal file
59
src/passthrough.cpp
Normal file
|
@ -0,0 +1,59 @@
|
|||
#include "passthrough.hpp"
|
||||
|
||||
#include "boost/unordered/concurrent_flat_map.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
typedef boost::unordered::concurrent_flat_map<std::string,PTInfo> PTMap;
|
||||
static PTMap g_PT;
|
||||
|
||||
namespace PassthroughStuff
|
||||
{
|
||||
std::mutex*
|
||||
get_mutex(const char *fusepath_)
|
||||
{
|
||||
std::mutex *m = nullptr;
|
||||
|
||||
g_PT.visit(fusepath_,
|
||||
[&](const PTMap::value_type &x_)
|
||||
{
|
||||
m = &x_.second.mutex;
|
||||
});
|
||||
|
||||
if(!m)
|
||||
{
|
||||
g_PT.insert(PTMap::value_type{fusepath_,PTInfo{}});
|
||||
g_PT.visit(fusepath_,
|
||||
[&](const PTMap::value_type &x_)
|
||||
{
|
||||
m = &x_.second.mutex;
|
||||
});
|
||||
}
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
PTInfo*
|
||||
get_pti(const char *fusepath_)
|
||||
{
|
||||
PTInfo *pti = nullptr;
|
||||
|
||||
g_PT.visit(fusepath_,
|
||||
[&](PTMap::value_type &x_)
|
||||
{
|
||||
pti = &x_.second;
|
||||
});
|
||||
|
||||
if(!pti)
|
||||
{
|
||||
g_PT.insert(PTMap::value_type{fusepath_,PTInfo{}});
|
||||
g_PT.visit(fusepath_,
|
||||
[&](PTMap::value_type &x_)
|
||||
{
|
||||
pti = &x_.second;
|
||||
});
|
||||
}
|
||||
|
||||
return pti;
|
||||
}
|
||||
};
|
35
src/passthrough.hpp
Normal file
35
src/passthrough.hpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
#pragma once
|
||||
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
struct PTInfo
|
||||
{
|
||||
PTInfo()
|
||||
: path_fd(-1),
|
||||
backing_id(0),
|
||||
open_count(0)
|
||||
{
|
||||
}
|
||||
|
||||
PTInfo(PTInfo &&pti_)
|
||||
{
|
||||
std::lock_guard<std::mutex> _(mutex);
|
||||
|
||||
path_fd = pti_.path_fd;
|
||||
backing_id = pti_.backing_id;
|
||||
filepath = pti_.filepath;
|
||||
open_count = pti_.open_count;
|
||||
}
|
||||
|
||||
int path_fd;
|
||||
int backing_id;
|
||||
unsigned open_count;
|
||||
std::string filepath;
|
||||
mutable std::mutex mutex;
|
||||
};
|
||||
|
||||
namespace PassthroughStuff
|
||||
{
|
||||
PTInfo* get_pti(const char *fusepath);
|
||||
}
|
Loading…
Reference in New Issue
Block a user