Skip to content

Commit

Permalink
fix for two valgrind-reported issues (#1001)
Browse files Browse the repository at this point in the history
* fix ~RenderPanel()

unregister from scene_manager_

* VisualizationManager(): fix initialization order

* fix segfault
  • Loading branch information
rhaschke authored and wjwwood committed Jun 21, 2016
1 parent eed1c1a commit 1da678a
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/rviz/display_group.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,10 +164,11 @@ void DisplayGroup::removeAllDisplays()
}
for( int i = displays_.size() - 1; i >= 0; i-- )
{
// printf(" displaygroup2 displays_.takeAt( %d )\n", i );
Display* child = displays_.takeAt( i );
Q_EMIT displayRemoved( child );
child->setParent( NULL ); // prevent child destructor from calling getParent()->takeChild().
child->setModel( NULL );
child_indexes_valid_ = false;
delete child;
}
if( model_ )
Expand All @@ -189,7 +190,6 @@ Display* DisplayGroup::takeDisplay( Display* child )
{
model_->beginRemove( this, Display::numChildren() + i, 1 );
}
// printf(" displaygroup3 displays_.takeAt( %d )\n", i );
result = displays_.takeAt( i );
Q_EMIT displayRemoved( result );
result->setParent( NULL );
Expand Down
4 changes: 4 additions & 0 deletions src/rviz/render_panel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ RenderPanel::~RenderPanel()
{
scene_manager_->destroyCamera( default_camera_ );
}
if( scene_manager_ )
{
scene_manager_->removeListener( this );
}
}

void RenderPanel::initialize(Ogre::SceneManager* scene_manager, DisplayContext* context)
Expand Down
4 changes: 3 additions & 1 deletion src/rviz/visualization_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,10 @@ VisualizationManager::VisualizationManager( RenderPanel* render_panel, WindowMan
, frame_count_(0)
, window_manager_(wm)
, private_( new VisualizationManagerPrivate )
, default_visibility_bit_( visibility_bit_allocator_.allocBit() )
{
// visibility_bit_allocator_ is listed after default_visibility_bit_ (and thus initialized later be default):
default_visibility_bit_ = visibility_bit_allocator_.allocBit();

frame_manager_ = new FrameManager(tf);

render_panel->setAutoRender(false);
Expand Down

0 comments on commit 1da678a

Please sign in to comment.