[Cppunit-cvs] cppunit2/src/opentest sharedmemorytransport.cpp,1.10,1.11
Brought to you by:
blep
From: Baptiste L. <bl...@us...> - 2006-03-11 11:46:29
|
Update of /cvsroot/cppunit/cppunit2/src/opentest In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv720/src/opentest Modified Files: sharedmemorytransport.cpp Log Message: * fixed more sharedmemorytransport bugs (named event switched to manual reset, incorrect read/write buffer in slave thread, bad buffer indexing in read/write loop) Index: sharedmemorytransport.cpp =================================================================== RCS file: /cvsroot/cppunit/cppunit2/src/opentest/sharedmemorytransport.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** sharedmemorytransport.cpp 10 Mar 2006 22:05:46 -0000 1.10 --- sharedmemorytransport.cpp 11 Mar 2006 11:46:25 -0000 1.11 *************** *** 158,168 **** { public: ! HANDLE create( const TCHAR *name ) { SECURITY_ATTRIBUTES sa; hEvent_.reset( ::CreateEvent( setChildProcessCanInheritSecurity(sa), ! FALSE, ! FALSE, ! name ) ); return get(); } --- 158,168 ---- { public: ! HANDLE create( const TCHAR *name, bool manualReset = false ) { SECURITY_ATTRIBUTES sa; hEvent_.reset( ::CreateEvent( setChildProcessCanInheritSecurity(sa), ! manualReset ? TRUE : FALSE, ! FALSE, ! name ) ); return get(); } *************** *** 423,428 **** setSharedMemoryRegion(); - // Initialize shared memory region shared_->structSize_ = sizeof(SharedData); shared_->mutex_ = autoManage( ::CreateMutex( &saAttr, FALSE, 0 ) ); --- 423,428 ---- setSharedMemoryRegion(); // Initialize shared memory region + memset( shared_, 0xba, fileMappingSize ); // fill shared memory region with garbage for easier debugging shared_->structSize_ = sizeof(SharedData); shared_->mutex_ = autoManage( ::CreateMutex( &saAttr, FALSE, 0 ) ); *************** *** 506,515 **** nameBuffer_[nameLength_] = suffixes[index]; nameBuffer_[nameLength_+1] = 0; ! if ( buffer.event_.create( nameBuffer_ ) == 0 ) throw SharedMemoryError( "Failed to create named event." ); buffer.state_ = bsSize; ! buffer.circular_ = &shared_->circularBuffers_[ orientedIndex ]; buffer.data_ = reinterpret_cast<Byte *>( shared_ ) + sizeof(SharedData); ! if ( orientedIndex > 0 ) buffer.data_ += shared_->circularBuffers_[ 0 ].size_; buffer.processedLength_ = 0; --- 506,515 ---- nameBuffer_[nameLength_] = suffixes[index]; nameBuffer_[nameLength_+1] = 0; ! if ( buffer.event_.create( nameBuffer_, true ) == 0 ) throw SharedMemoryError( "Failed to create named event." ); buffer.state_ = bsSize; ! buffer.circular_ = &shared_->circularBuffers_[ index ]; buffer.data_ = reinterpret_cast<Byte *>( shared_ ) + sizeof(SharedData); ! if ( index > 0 ) buffer.data_ += shared_->circularBuffers_[ 0 ].size_; buffer.processedLength_ = 0; *************** *** 702,712 **** || getWriteBuffer().stream_.packets().hasPendingMessage() ) { ! OPENTEST_SHMEM_LOG( "Acquiring shared_->mutex_" ); ScopedMutexLock guard( shared_->mutex_ ); ! OPENTEST_SHMEM_LOG( "Acquired shared_->mutex_" ); readPendingData(); writePendingData(); } - OPENTEST_SHMEM_LOG( "Released shared_->mutex_" ); } --- 702,712 ---- || getWriteBuffer().stream_.packets().hasPendingMessage() ) { ! OPENTEST_SHMEM_LOG( "Trying to acquire mutex: shared_->mutex_ [%p]", shared_->mutex_ ); ScopedMutexLock guard( shared_->mutex_ ); ! OPENTEST_SHMEM_LOG( "Acquired mutex: shared_->mutex_ [%p]", shared_->mutex_ ); readPendingData(); writePendingData(); + OPENTEST_SHMEM_LOG( "Releasing mutex: shared_->mutex_ [%p]", shared_->mutex_ ); } } *************** *** 717,720 **** --- 717,721 ---- BufferInfo &buffer = getReadBuffer(); buffer.event_.reset(); + OPENTEST_SHMEM_LOG( "Resetting buffers_[0].buffer.event_" ); Pos oldReadPos = buffer.circular_->readPos_; while ( true ) *************** *** 729,734 **** Pos toRead = CPPTL_MIN( available, sizeof(buffer.messageLength_) - buffer.processedLength_ ); memcpy( reinterpret_cast<Byte *>(&buffer.messageLength_) + buffer.processedLength_, ! buffer.data_ + buffer.processedLength_, toRead ); buffer.read( "Message size", toRead ); --- 730,736 ---- Pos toRead = CPPTL_MIN( available, sizeof(buffer.messageLength_) - buffer.processedLength_ ); + Byte *target = buffer.data_ + buffer.processedLength_+ buffer.circular_->readPos_; memcpy( reinterpret_cast<Byte *>(&buffer.messageLength_) + buffer.processedLength_, ! target, toRead ); buffer.read( "Message size", toRead ); *************** *** 745,749 **** { Pos toRead = CPPTL_MIN( available, buffer.messageLength_ ); ! buffer.stream_.packets().write( buffer.data_ + buffer.circular_->readPos_, toRead ); buffer.read( "Message content", toRead ); --- 747,752 ---- { Pos toRead = CPPTL_MIN( available, buffer.messageLength_ ); ! Byte *target = buffer.data_ + buffer.processedLength_+ buffer.circular_->readPos_; ! buffer.stream_.packets().write( target, toRead ); buffer.read( "Message content", toRead ); *************** *** 764,768 **** --- 767,774 ---- if ( oldReadPos != buffer.circular_->readPos_ ) + { + OPENTEST_SHMEM_LOG( "Signaling buffers_[0].buffer.event_" ); buffer.event_.signal(); + } } *************** *** 771,774 **** --- 777,781 ---- { BufferInfo &buffer = getWriteBuffer(); + OPENTEST_SHMEM_LOG( "Resetting buffers_[1].buffer.event_" ); buffer.event_.reset(); Pos oldWritePos = buffer.circular_->writePos_; *************** *** 786,790 **** Pos toWrite = CPPTL_MIN( available, sizeof(buffer.messageLength_) - buffer.processedLength_ ); ! memcpy( buffer.data_ + buffer.processedLength_, reinterpret_cast<Byte *>(&buffer.messageLength_) + buffer.processedLength_, toWrite ); --- 793,798 ---- Pos toWrite = CPPTL_MIN( available, sizeof(buffer.messageLength_) - buffer.processedLength_ ); ! Byte *target = buffer.data_ + buffer.circular_->normalizeWritePos() + buffer.processedLength_; ! memcpy( target, reinterpret_cast<Byte *>(&buffer.messageLength_) + buffer.processedLength_, toWrite ); *************** *** 801,805 **** { Pos toWrite = CPPTL_MIN( available, buffer.messageLength_ ); ! Byte *target = buffer.data_ + buffer.circular_->normalizeWritePos(); Pos written = buffer.stream_.packets().read( target, toWrite ); buffer.write( "Message content", written ); --- 809,813 ---- { Pos toWrite = CPPTL_MIN( available, buffer.messageLength_ ); ! Byte *target = buffer.data_ + buffer.circular_->normalizeWritePos() + buffer.processedLength_; Pos written = buffer.stream_.packets().read( target, toWrite ); buffer.write( "Message content", written ); *************** *** 819,823 **** --- 827,834 ---- } if ( oldWritePos != buffer.circular_->writePos_ ) + { + OPENTEST_SHMEM_LOG( "signaling buffers_[1].buffer.event_" ); buffer.event_.signal(); + } } |