Navigation Menu

Skip to content

Commit

Permalink
fix segv if Lua handler is invalid
Browse files Browse the repository at this point in the history
  • Loading branch information
rtri committed Sep 2, 2019
1 parent c0c48fc commit a0129db
Showing 1 changed file with 30 additions and 28 deletions.
58 changes: 30 additions & 28 deletions rts/Lua/LuaDefs.h
Expand Up @@ -85,43 +85,45 @@ namespace {






#define DECL_LOAD_HANDLER(HandlerType, HandlerInstance) \ #define DECL_LOAD_HANDLER(HandlerType, handlerInst) \
bool HandlerType::LoadHandler() { \ bool HandlerType::LoadHandler() { \
std::lock_guard<spring::mutex> lk(m_singleton); \ std::lock_guard<spring::mutex> lk(m_singleton); \
\ \
if (HandlerInstance != nullptr) \ if (handlerInst != nullptr) \
return (HandlerInstance->IsValid()); \ return (handlerInst->IsValid()); \
if (!HandlerType::CanLoadHandler()) \ if (!HandlerType::CanLoadHandler()) \
return false; \ return false; \
\ \
HandlerInstance = new HandlerType(); \ if (!(handlerInst = new HandlerType())->IsValid()) \
HandlerInstance->CollectGarbage(true); \ return false; \
return (HandlerInstance->IsValid()); \ \
return (handlerInst->CollectGarbage(true), true); \
} }


#define DECL_LOAD_SPLIT_HANDLER(HandlerType, HandlerInstance) \ #define DECL_LOAD_SPLIT_HANDLER(HandlerType, handlerInst) \
bool HandlerType::LoadHandler(bool onlySynced) { \ bool HandlerType::LoadHandler(bool onlySynced) { \
std::lock_guard<spring::mutex> lk(m_singleton); \ std::lock_guard<spring::mutex> lk(m_singleton); \
\ \
if (HandlerInstance != nullptr) \ if (handlerInst != nullptr) \
return (HandlerInstance->IsValid()); \ return (handlerInst->IsValid()); \
if (!HandlerType::CanLoadHandler()) \ if (!HandlerType::CanLoadHandler()) \
return false; \ return false; \
\ \
HandlerInstance = new HandlerType(onlySynced); \ if (!(handlerInst = new HandlerType(onlySynced))->IsValid()) \
HandlerInstance->CollectGarbage(true); \ return false; \
return (HandlerInstance->IsValid()); \ \
return (handlerInst->CollectGarbage(true), true); \
} }


#define DECL_FREE_HANDLER(HandlerType, HandlerInstance) \ #define DECL_FREE_HANDLER(HandlerType, handlerInst) \
bool HandlerType::FreeHandler() { \ bool HandlerType::FreeHandler() { \
std::lock_guard<spring::mutex> lk(m_singleton); \ std::lock_guard<spring::mutex> lk(m_singleton); \
\ \
if (HandlerInstance == nullptr) \ if (handlerInst == nullptr) \
return false; \ return false; \
\ \
auto* inst = HandlerInstance; \ HandlerType* inst = handlerInst; \
HandlerInstance = nullptr; \ handlerInst = nullptr; \
inst->KillLua(true); \ inst->KillLua(true); \
delete inst; \ delete inst; \
return true; \ return true; \
Expand Down

0 comments on commit a0129db

Please sign in to comment.