diff options
author | joreland@mysql.com <> | 2004-08-13 09:53:21 +0200 |
---|---|---|
committer | joreland@mysql.com <> | 2004-08-13 09:53:21 +0200 |
commit | 73e15672f41d99aca0b33691d257623a59c30ea6 (patch) | |
tree | 08dc9b3e4d52e4e67d4836d4a19b585f2fa71418 /ndb | |
parent | 3fdc2999b78b997aa149d9292d7d55d29c95f0f1 (diff) | |
download | mariadb-git-73e15672f41d99aca0b33691d257623a59c30ea6.tar.gz |
Introduced system for automatic clearing of block global variables (VM_TRACE'd)
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/src/kernel/vm/SimulatedBlock.cpp | 31 | ||||
-rw-r--r-- | ndb/src/kernel/vm/SimulatedBlock.hpp | 12 |
2 files changed, 41 insertions, 2 deletions
diff --git a/ndb/src/kernel/vm/SimulatedBlock.cpp b/ndb/src/kernel/vm/SimulatedBlock.cpp index e62445a77ff..18b7f474ddc 100644 --- a/ndb/src/kernel/vm/SimulatedBlock.cpp +++ b/ndb/src/kernel/vm/SimulatedBlock.cpp @@ -104,6 +104,11 @@ SimulatedBlock::SimulatedBlock(BlockNumber blockNumber, UpgradeStartup::installEXEC(this); CLEAR_ERROR_INSERT_VALUE; + +#ifdef VM_TRACE + m_global_variables = new Ptr<void> * [1]; + m_global_variables[0] = 0; +#endif } SimulatedBlock::~SimulatedBlock() @@ -112,6 +117,10 @@ SimulatedBlock::~SimulatedBlock() #ifdef VM_TRACE_TIME printTimes(stdout); #endif + +#ifdef VM_TRACE + delete [] m_global_variables; +#endif } void @@ -1771,3 +1780,25 @@ SimulatedBlock::execUPGRADE(Signal* signal){ break; } } + +#ifdef VM_TRACE +void +SimulatedBlock::clear_global_variables(){ + Ptr<void> ** tmp = m_global_variables; + while(* tmp != 0){ + (* tmp)->i = RNIL; + (* tmp)->p = 0; + tmp++; + } +} + +void +SimulatedBlock::init_globals_list(void ** tmp, size_t cnt){ + m_global_variables = new Ptr<void> * [cnt+1]; + for(size_t i = 0; i<cnt; i++){ + m_global_variables[i] = (Ptr<void>*)tmp[i]; + } + m_global_variables[cnt] = 0; +} + +#endif diff --git a/ndb/src/kernel/vm/SimulatedBlock.hpp b/ndb/src/kernel/vm/SimulatedBlock.hpp index 6d3e89a3322..6d46e9cc377 100644 --- a/ndb/src/kernel/vm/SimulatedBlock.hpp +++ b/ndb/src/kernel/vm/SimulatedBlock.hpp @@ -96,7 +96,7 @@ protected: * Handling of execFunctions */ typedef void (SimulatedBlock::* ExecFunction)(Signal* signal); - void addRecSignalImpl(GlobalSignalNumber g, ExecFunction fun, bool f = false); + void addRecSignalImpl(GlobalSignalNumber g, ExecFunction fun, bool f =false); void installSimulatedBlockFunctions(); ExecFunction theExecArray[MAX_GSN+1]; public: @@ -447,6 +447,12 @@ public: } m_timeTrace[MAX_GSN+1]; Uint32 m_currentGsn; #endif + +#ifdef VM_TRACE + Ptr<void> **m_global_variables; + void clear_global_variables(); + void init_globals_list(void ** tmp, size_t cnt); +#endif }; inline @@ -454,6 +460,9 @@ void SimulatedBlock::executeFunction(GlobalSignalNumber gsn, Signal* signal){ ExecFunction f = theExecArray[gsn]; if(gsn <= MAX_GSN && f != 0){ +#ifdef VM_TRACE + clear_global_variables(); +#endif (this->*f)(signal); return; } @@ -679,6 +688,5 @@ BLOCK::addRecSignal(GlobalSignalNumber gsn, ExecSignalLocal f, bool force){ \ addRecSignalImpl(gsn, (ExecFunction)f, force);\ } - #endif |