mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2026-02-07 18:26:49 +08:00
Revert "Add workaround for chaiscript used as static"
This reverts commit a281d9571e00788784a10bdae054f92cb3e3fb1a.
This commit is contained in:
parent
bd736eddec
commit
3b48983bc2
@ -75,19 +75,17 @@ namespace chaiscript
|
|||||||
|
|
||||||
~Thread_Storage()
|
~Thread_Storage()
|
||||||
{
|
{
|
||||||
if (!destroyed) {
|
t().erase(this);
|
||||||
t().erase(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const T *operator->() const
|
inline const T *operator->() const
|
||||||
{
|
{
|
||||||
return &(t()[const_cast<Thread_Storage *>(this)]);
|
return &(t()[this]);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const T &operator*() const
|
inline const T &operator*() const
|
||||||
{
|
{
|
||||||
return t()[const_cast<Thread_Storage *>(this)];
|
return t()[this];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline T *operator->()
|
inline T *operator->()
|
||||||
@ -100,30 +98,15 @@ namespace chaiscript
|
|||||||
return t()[this];
|
return t()[this];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void *m_key;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Map_Holder {
|
static std::unordered_map<const void*, T> &t()
|
||||||
std::unordered_map<Thread_Storage<T> *, T> map;
|
|
||||||
|
|
||||||
Map_Holder() = default;
|
|
||||||
Map_Holder(const Map_Holder &) = delete;
|
|
||||||
Map_Holder(Map_Holder &&) = delete;
|
|
||||||
Map_Holder& operator=(Map_Holder &&) = delete;
|
|
||||||
Map_Holder& operator=(const Map_Holder &&) = delete;
|
|
||||||
~Map_Holder() {
|
|
||||||
// here is the theory:
|
|
||||||
// * If the Map_Holder is destroyed before the Thread_Storage, a flag will get set
|
|
||||||
// * If destroyed after the Thread_Storage, the * will have been removed from `map` and nothing will happen
|
|
||||||
for(auto &elem : map) { elem.first->destroyed = true; }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static std::unordered_map<Thread_Storage<T> *, T> &t()
|
|
||||||
{
|
{
|
||||||
thread_local Map_Holder my_map;
|
thread_local std::unordered_map<const void *, T> my_t;
|
||||||
return my_map.map;
|
return my_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool destroyed{false};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#else // threading disabled
|
#else // threading disabled
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user