Bug #18591 Repeated "show" and "all status" calls to ndb_mgm causes mgmd to crash

- not having lock can cause "block number list" to become corrupt => crash
- also may result in 2 threads receiving same block no => possble cause of
Bug #13987 Cluster: Loss of data nodes can cause high CPU usage from ndb_mgmd
parent b592d872
...@@ -2107,6 +2107,7 @@ int ...@@ -2107,6 +2107,7 @@ int
MgmtSrvr::abortBackup(Uint32 backupId) MgmtSrvr::abortBackup(Uint32 backupId)
{ {
SignalSender ss(theFacade); SignalSender ss(theFacade);
ss.lock(); // lock will be released on exit
bool next; bool next;
NodeId nodeId = 0; NodeId nodeId = 0;
......
...@@ -75,7 +75,9 @@ SignalSender::SignalSender(TransporterFacade *facade) ...@@ -75,7 +75,9 @@ SignalSender::SignalSender(TransporterFacade *facade)
{ {
m_cond = NdbCondition_Create(); m_cond = NdbCondition_Create();
theFacade = facade; theFacade = facade;
lock();
m_blockNo = theFacade->open(this, execSignal, execNodeStatus); m_blockNo = theFacade->open(this, execSignal, execNodeStatus);
unlock();
assert(m_blockNo > 0); assert(m_blockNo > 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment