Fix lock after free in module API

Former-commit-id: d88fd1588d292bffc0aa53c299cb52e7a4e91015
This commit is contained in:
John Sully 2020-07-17 21:02:51 +00:00
parent 198db651d2
commit 9928562dad

View File

@ -257,10 +257,12 @@ int aeCreateRemoteFileEvent(aeEventLoop *eventLoop, int fd, int mask,
} }
if (fSynchronous) if (fSynchronous)
{
{ {
std::unique_lock<std::mutex> ulock(cmd.pctl->mutexcv, std::adopt_lock); std::unique_lock<std::mutex> ulock(cmd.pctl->mutexcv, std::adopt_lock);
cmd.pctl->cv.wait(ulock); cmd.pctl->cv.wait(ulock);
ret = cmd.pctl->rval; ret = cmd.pctl->rval;
}
delete cmd.pctl; delete cmd.pctl;
} }
@ -300,7 +302,7 @@ int aePostFunction(aeEventLoop *eventLoop, std::function<void()> fn, bool fSynch
cmd.fLock = fLock; cmd.fLock = fLock;
if (fSynchronous) if (fSynchronous)
{ {
cmd.pctl = new (MALLOC_LOCAL) aeCommandControl(); cmd.pctl = new (MALLOC_LOCAL) aeCommandControl;
cmd.pctl->mutexcv.lock(); cmd.pctl->mutexcv.lock();
} }
@ -310,10 +312,12 @@ int aePostFunction(aeEventLoop *eventLoop, std::function<void()> fn, bool fSynch
AE_ASSERT(size == sizeof(cmd)); AE_ASSERT(size == sizeof(cmd));
int ret = AE_OK; int ret = AE_OK;
if (fSynchronous) if (fSynchronous)
{
{ {
std::unique_lock<std::mutex> ulock(cmd.pctl->mutexcv, std::adopt_lock); std::unique_lock<std::mutex> ulock(cmd.pctl->mutexcv, std::adopt_lock);
cmd.pctl->cv.wait(ulock); cmd.pctl->cv.wait(ulock);
ret = cmd.pctl->rval; ret = cmd.pctl->rval;
}
delete cmd.pctl; delete cmd.pctl;
} }
return ret; return ret;