mirror of
https://github.com/brunoherbelin/vimix.git
synced 2026-01-07 07:25:27 +01:00
BugFix Post-MemCheck fix memory leaks corrections
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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_; }
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -128,6 +128,7 @@ class MousePointer
|
||||
MousePointer();
|
||||
MousePointer(MousePointer const& copy) = delete;
|
||||
MousePointer& operator=(MousePointer const& copy) = delete;
|
||||
~MousePointer();
|
||||
|
||||
public:
|
||||
static MousePointer& manager ()
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user