Browse Source

SYMBOL_LIBRARY_MANAGER: Clarify UpdateBuffer ownership

Again, this doesn't retain part-ownership of the pointer
and null is a wxCHECK failure. So hoist the null check
and then handle it as a ref (=non null, caller owns).

Also fixes a trivial mem leak in test_symbol_library_manager.cpp.
jobs
John Beard 1 year ago
parent
commit
49a0318fe5
  1. 12
      eeschema/symbol_library_manager.cpp
  2. 2
      eeschema/symbol_library_manager.h
  3. 10
      qa/tests/eeschema/test_symbol_library_manager.cpp

12
eeschema/symbol_library_manager.cpp

@ -507,9 +507,9 @@ bool SYMBOL_LIBRARY_MANAGER::UpdateSymbolAfterRename( LIB_SYMBOL* aSymbol, const
LIB_BUFFER& libBuf = getLibraryBuffer( aLibrary );
std::shared_ptr<SYMBOL_BUFFER> symbolBuf = libBuf.GetBuffer( aOldName );
wxCHECK( symbolBuf, false );
wxCHECK( symbolBuf && aSymbol, false );
libBuf.UpdateBuffer( symbolBuf, aSymbol );
libBuf.UpdateBuffer( *symbolBuf, *aSymbol );
OnDataChanged();
return true;
@ -949,15 +949,13 @@ bool LIB_BUFFER::CreateBuffer( LIB_SYMBOL* aCopy, SCH_SCREEN* aScreen )
}
bool LIB_BUFFER::UpdateBuffer( std::shared_ptr<SYMBOL_BUFFER> aSymbolBuf, LIB_SYMBOL* aCopy )
bool LIB_BUFFER::UpdateBuffer( SYMBOL_BUFFER& aSymbolBuf, const LIB_SYMBOL& aCopy )
{
wxCHECK( aCopy && aSymbolBuf, false );
LIB_SYMBOL* bufferedSymbol = aSymbolBuf->GetSymbol();
LIB_SYMBOL* bufferedSymbol = aSymbolBuf.GetSymbol();
wxCHECK( bufferedSymbol, false );
*bufferedSymbol = *aCopy;
*bufferedSymbol = aCopy;
++m_hash;
return true;

2
eeschema/symbol_library_manager.h

@ -108,7 +108,7 @@ public:
bool CreateBuffer( LIB_SYMBOL* aCopy, SCH_SCREEN* aScreen );
///< Update the buffered symbol with the contents of \a aCopy.
bool UpdateBuffer( std::shared_ptr<SYMBOL_BUFFER> aSymbolBuf, LIB_SYMBOL* aCopy );
bool UpdateBuffer( SYMBOL_BUFFER& aSymbolBuf, const LIB_SYMBOL& aCopy );
/**
* Delete the given symbol buffer from the library buffer.

10
qa/tests/eeschema/test_symbol_library_manager.cpp

@ -127,11 +127,13 @@ BOOST_AUTO_TEST_CASE( LibBuffer )
BOOST_CHECK_EQUAL( symbolNames[0], childSymbol1->GetName() );
std::shared_ptr<SYMBOL_BUFFER> buf = libBuffer.GetBuffer( parentSymbol1->GetName() );
LIB_SYMBOL* tmp = new LIB_SYMBOL( *parentSymbol1 );
tmp->GetDescriptionField().SetText( wxS( "Description" ) );
libBuffer.UpdateBuffer( buf, tmp );
LIB_SYMBOL tmp( *parentSymbol1 );
tmp.GetDescriptionField().SetText( wxS( "Description" ) );
libBuffer.UpdateBuffer( *buf, tmp );
BOOST_CHECK_EQUAL( libBuffer.GetHash(), 4 );
BOOST_CHECK( *libBuffer.GetSymbol( parentSymbol1->GetName() ) == *tmp );
BOOST_CHECK( *libBuffer.GetSymbol( parentSymbol1->GetName() ) == tmp );
const bool deletedOk = libBuffer.DeleteBuffer( *buf );
BOOST_CHECK( deletedOk );

Loading…
Cancel
Save