Skip to content

Commit 1da678a

Browse files
rhaschkewjwwood
authored andcommitted
fix for two valgrind-reported issues (#1001)
* fix ~RenderPanel() unregister from scene_manager_ * VisualizationManager(): fix initialization order * fix segfault
1 parent eed1c1a commit 1da678a

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

src/rviz/display_group.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,11 @@ void DisplayGroup::removeAllDisplays()
164164
}
165165
for( int i = displays_.size() - 1; i >= 0; i-- )
166166
{
167-
// printf(" displaygroup2 displays_.takeAt( %d )\n", i );
168167
Display* child = displays_.takeAt( i );
169168
Q_EMIT displayRemoved( child );
170169
child->setParent( NULL ); // prevent child destructor from calling getParent()->takeChild().
170+
child->setModel( NULL );
171+
child_indexes_valid_ = false;
171172
delete child;
172173
}
173174
if( model_ )
@@ -189,7 +190,6 @@ Display* DisplayGroup::takeDisplay( Display* child )
189190
{
190191
model_->beginRemove( this, Display::numChildren() + i, 1 );
191192
}
192-
// printf(" displaygroup3 displays_.takeAt( %d )\n", i );
193193
result = displays_.takeAt( i );
194194
Q_EMIT displayRemoved( result );
195195
result->setParent( NULL );

src/rviz/render_panel.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ RenderPanel::~RenderPanel()
6666
{
6767
scene_manager_->destroyCamera( default_camera_ );
6868
}
69+
if( scene_manager_ )
70+
{
71+
scene_manager_->removeListener( this );
72+
}
6973
}
7074

7175
void RenderPanel::initialize(Ogre::SceneManager* scene_manager, DisplayContext* context)

src/rviz/visualization_manager.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,10 @@ VisualizationManager::VisualizationManager( RenderPanel* render_panel, WindowMan
125125
, frame_count_(0)
126126
, window_manager_(wm)
127127
, private_( new VisualizationManagerPrivate )
128-
, default_visibility_bit_( visibility_bit_allocator_.allocBit() )
129128
{
129+
// visibility_bit_allocator_ is listed after default_visibility_bit_ (and thus initialized later be default):
130+
default_visibility_bit_ = visibility_bit_allocator_.allocBit();
131+
130132
frame_manager_ = new FrameManager(tf);
131133

132134
render_panel->setAutoRender(false);

0 commit comments

Comments
 (0)