BugFix Post-MemCheck fix memory leaks corrections

This commit is contained in:
Bruno Herbelin
2024-03-03 20:02:29 +01:00
parent f3f7c57f10
commit 62060e0c04
10 changed files with 56 additions and 13 deletions

View File

@@ -52,3 +52,15 @@ perf record --pid=XXXXX
- Analyse using https://github.com/KDAB/hotspot
Memcheck
--------
To generate memory usage plots in [massif format](https://valgrind.org/docs/manual/ms-manual.html):
G_SLICE=always-malloc valgrind --tool=massif ./vimix
To check for memory leaks:
G_SLICE=always-malloc valgrind --leak-check=full --log-file=vimix_mem.txt ./vimix

View File

@@ -34,6 +34,12 @@ Grid::Grid(Group *parent, Shapes s) : active_(false), shape_(s), unit_(UNIT_DEFA
}
Grid::~Grid()
{
if (root_)
delete root_;
}
glm::vec2 Grid::step() const {
if ( shape_ != GRID_POLAR )

View File

@@ -15,7 +15,7 @@ public:
} Shapes;
Grid(Group *parent, Shapes s = GRID_ORTHO);
virtual ~Grid() {}
virtual ~Grid();
// if active, the view will use it to approximate coordinates
inline bool active() const { return active_; }

View File

@@ -268,13 +268,14 @@ std::string GstToolkit::used_gpu_decoding_plugins(GstElement *gstbin)
{
GstElement *e = static_cast<GstElement*>(g_value_peek_pointer(&value));
if (e) {
const gchar *name = gst_element_get_name(e);
gchar *name = gst_element_get_name(e);
for (int i = 0; i < N; i++) {
if (std::string(name).find(plugins[i]) != std::string::npos) {
found = plugins[i];
break;
}
}
g_free(name);
}
}
g_value_unset(&value);

View File

@@ -747,8 +747,10 @@ void MediaPlayer::Frame::unmap()
void MediaPlayer::pipeline_terminate( GstElement *p )
{
#ifdef MEDIA_PLAYER_DEBUG
g_printerr("MediaPlayer %s close\n", gst_element_get_name(p));
Log::Info("MediaPlayer %s closed", gst_element_get_name(p));
gchar *name = gst_element_get_name(p);
g_printerr("MediaPlayer %s close\n", name);
Log::Info("MediaPlayer %s closed", name);
g_free(name);
#endif
// end pipeline

View File

@@ -243,3 +243,12 @@ MousePointer::MousePointer() : mode_(Pointer::POINTER_DEFAULT)
pointer_[Pointer::POINTER_METRONOME] = new PointerMetronome;
}
MousePointer::~MousePointer()
{
delete pointer_[Pointer::POINTER_DEFAULT];
delete pointer_[Pointer::POINTER_GRID];
delete pointer_[Pointer::POINTER_LINEAR];
delete pointer_[Pointer::POINTER_SPRING];
delete pointer_[Pointer::POINTER_WIGGLY];
delete pointer_[Pointer::POINTER_METRONOME];
}

View File

@@ -128,6 +128,7 @@ class MousePointer
MousePointer();
MousePointer(MousePointer const& copy) = delete;
MousePointer& operator=(MousePointer const& copy) = delete;
~MousePointer();
public:
static MousePointer& manager ()

View File

@@ -224,18 +224,28 @@ void Primitive::accept(Visitor& v)
void Primitive::replaceShader( Shader *newshader )
{
if (newshader) {
// keep ref to previous shader
Shader *previousshader = shader_;
// apply new shader to Primitive, even if nullptr
shader_ = newshader;
if (shader_) {
// get new attribs...
glm::mat4 iTransform = newshader->iTransform;
glm::vec4 color = newshader->color;
if (shader_) {
iTransform = shader_->iTransform;
color = shader_->color;
delete shader_;
// ...or use previous shader attribs, if existed
if (previousshader) {
iTransform = previousshader->iTransform;
color = previousshader->color;
// shader is swapped, previous can be deleted
delete previousshader;
}
// Apply attribs
shader_->iTransform = iTransform;
shader_->color = color;
}
shader_ = newshader;
}
//

View File

@@ -423,7 +423,7 @@ void Settings::Load(const string &filename)
return;
// version
int major, minor, patch;
int major = 0, minor = 0, patch = 0;
pRoot->QueryIntAttribute("major", &major);
pRoot->QueryIntAttribute("minor", &minor);
pRoot->QueryIntAttribute("patch", &patch);

View File

@@ -382,8 +382,10 @@ void Stream::Frame::unmap()
void Stream::pipeline_terminate( GstElement *p )
{
#ifdef STREAM_DEBUG
g_printerr("Stream %s close\n", gst_element_get_name(p));
Log::Info("Stream %s closed", gst_element_get_name(p));
gchar *name = gst_element_get_name(p);
g_printerr("Stream %s close\n", name);
Log::Info("Stream %s closed", name);
g_free(name);
#endif
// force flush