From: Jonas Oreland Date: November 30 2009 11:54am Subject: bzr commit into mysql-5.1-telco-7.0 branch (jonas:3247) List-Archive: http://lists.mysql.com/commits/92066 Message-Id: <20091130115419.0235CA4B5CF@perch.localdomain> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_Z663laD3+TkuzP1yGkNgRA)" --Boundary_(ID_Z663laD3+TkuzP1yGkNgRA) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/jonas/src/telco-6.4/ based on revid:jonas@stripped 3247 Jonas Oreland 2009-11-30 [merge] merge 63 to 70 modified: storage/ndb/src/kernel/blocks/ndbfs/AsyncIoThread.hpp storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp === modified file 'storage/ndb/src/kernel/blocks/ndbfs/AsyncIoThread.hpp' --- a/storage/ndb/src/kernel/blocks/ndbfs/AsyncIoThread.hpp 2009-10-12 07:07:14 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbfs/AsyncIoThread.hpp 2009-11-30 11:53:55 +0000 @@ -104,6 +104,8 @@ public: // Information for open, needed if the first open action fails. AsyncFile* file; Uint32 theTrace; + + MemoryChannel::ListMember m_mem_channel; }; NdbOut& operator <<(NdbOut&, const Request&); === modified file 'storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp' --- a/storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp 2009-05-27 15:21:45 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp 2009-11-30 11:53:55 +0000 @@ -78,20 +78,26 @@ template class MemoryChannel { public: - // wl4391_todo. adds 4*. could set per ndb version. why 512 ? - MemoryChannel( int size= 4* 512); - virtual ~MemoryChannel( ); + MemoryChannel(); + virtual ~MemoryChannel(); - void writeChannel( T *t); - void writeChannelNoSignal( T *t); + void writeChannel(T *t); + void writeChannelNoSignal(T *t); T* readChannel(); T* tryReadChannel(); + /** + * Should be made class using MemoryChannel + */ + struct ListMember + { + T* m_next; + }; + private: - int theSize; - T **theChannel; - CircularIndex theWriteIndex; - CircularIndex theReadIndex; + Uint32 m_occupancy; + T* m_head; // First element in list (e.g will be read by readChannel) + T* m_tail; NdbMutex* theMutexPtr; NdbCondition* theConditionPtr; @@ -103,18 +109,14 @@ template NdbOut& operator<<(NdbOut& out, const MemoryChannel & chn) { NdbMutex_Lock(chn.theMutexPtr); - out << "[ theSize: " << chn.theSize - << " theReadIndex: " << (int)chn.theReadIndex - << " theWriteIndex: " << (int)chn.theWriteIndex << " ]"; + out << "[ occupancy: " << chn.m_occupancy + << " ]"; NdbMutex_Unlock(chn.theMutexPtr); return out; } -template MemoryChannel::MemoryChannel( int size): - theSize(size), - theChannel(new T*[size] ), - theWriteIndex(0, size), - theReadIndex(0, size) +template MemoryChannel::MemoryChannel() : + m_occupancy(0), m_head(0), m_tail(0) { theMutexPtr = NdbMutex_Create(); theConditionPtr = NdbCondition_Create(); @@ -124,55 +126,79 @@ template MemoryChannel::~Me { NdbMutex_Destroy(theMutexPtr); NdbCondition_Destroy(theConditionPtr); - delete [] theChannel; } template void MemoryChannel::writeChannel( T *t) { - - NdbMutex_Lock(theMutexPtr); - if(full(theWriteIndex, theReadIndex) || theChannel == NULL) abort(); - theChannel[theWriteIndex]= t; - ++theWriteIndex; + writeChannelNoSignal(t); NdbCondition_Signal(theConditionPtr); - NdbMutex_Unlock(theMutexPtr); } template void MemoryChannel::writeChannelNoSignal( T *t) { - NdbMutex_Lock(theMutexPtr); - if(full(theWriteIndex, theReadIndex) || theChannel == NULL) abort(); - theChannel[theWriteIndex]= t; - ++theWriteIndex; + if (m_head == 0) + { + assert(m_occupancy == 0); + m_head = m_tail = t; + } + else + { + assert(m_tail != 0); + m_tail->m_mem_channel.m_next = t; + m_tail = t; + } + t->m_mem_channel.m_next = 0; + m_occupancy++; NdbMutex_Unlock(theMutexPtr); } template T* MemoryChannel::readChannel() { - T* tmp; - NdbMutex_Lock(theMutexPtr); - while ( empty(theWriteIndex, theReadIndex) ) + while (m_head == 0) { + assert(m_occupancy == 0); NdbCondition_Wait(theConditionPtr, - theMutexPtr); + theMutexPtr); } - - tmp= theChannel[theReadIndex]; - ++theReadIndex; + assert(m_occupancy > 0); + T* tmp = m_head; + if (m_head == m_tail) + { + assert(m_occupancy == 1); + m_head = m_tail = 0; + } + else + { + m_head = m_head->m_mem_channel.m_next; + } + m_occupancy--; NdbMutex_Unlock(theMutexPtr); return tmp; } template T* MemoryChannel::tryReadChannel() { - T* tmp= 0; NdbMutex_Lock(theMutexPtr); - if ( !empty(theWriteIndex, theReadIndex) ) - { - tmp= theChannel[theReadIndex]; - ++theReadIndex; + T* tmp = m_head; + if (m_head != 0) + { + assert(m_occupancy > 0); + if (m_head == m_tail) + { + assert(m_occupancy == 1); + m_head = m_tail = 0; + } + else + { + m_head = m_head->m_mem_channel.m_next; + } + m_occupancy--; + } + else + { + assert(m_occupancy == 0); } NdbMutex_Unlock(theMutexPtr); return tmp; --Boundary_(ID_Z663laD3+TkuzP1yGkNgRA) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/jonas@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/jonas@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jonas@stripped # target_branch: file:///home/jonas/src/telco-6.4/ # testament_sha1: 6f8da7e443a81c377bfdf87a0bc63aecfa88b262 # timestamp: 2009-11-30 12:54:18 +0100 # source_branch: file:///home/jonas/src/64-local/ # base_revision_id: jonas@stripped # # Begin bundle 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 lw9q/IIA/+LuSKcKEhilHhCg --Boundary_(ID_Z663laD3+TkuzP1yGkNgRA)--