Fix some memory leaks and other valgrind warnings.
This commit is contained in:
parent
a3f1265ef3
commit
0da98f95b8
|
@ -126,7 +126,7 @@ nsd.default_path( *default_path );
|
||||||
nsd.run();
|
nsd.run();
|
||||||
|
|
||||||
if ( nsd.default_path() )
|
if ( nsd.default_path() )
|
||||||
*default_path = strdup( nsd.default_path() );
|
*default_path = nsd.default_path();
|
||||||
|
|
||||||
return nsd.path;} {}
|
return nsd.path;} {}
|
||||||
}
|
}
|
||||||
|
|
2
lib/ntk
2
lib/ntk
|
@ -1 +1 @@
|
||||||
Subproject commit 415422bd1b35cdbac5c751dcf8f4fb9cbe696927
|
Subproject commit d0063527aa360a3f1fd34e76fc0dd9125efb9202
|
|
@ -176,6 +176,9 @@ Chain::~Chain ( )
|
||||||
|
|
||||||
engine()->lock();
|
engine()->lock();
|
||||||
|
|
||||||
|
for ( unsigned int i = scratch_port.size(); i--; )
|
||||||
|
delete[] (sample_t*)scratch_port[i].buffer();
|
||||||
|
|
||||||
/* if we leave this up to FLTK, it will happen after we've
|
/* if we leave this up to FLTK, it will happen after we've
|
||||||
already destroyed the engine */
|
already destroyed the engine */
|
||||||
modules_pack->clear();
|
modules_pack->clear();
|
||||||
|
|
|
@ -190,11 +190,11 @@ void Mixer::command_new ( void )
|
||||||
{
|
{
|
||||||
DMESSAGE( "New project" );
|
DMESSAGE( "New project" );
|
||||||
|
|
||||||
char *default_path;
|
char *default_path = read_line( user_config_dir, "default_path" );
|
||||||
|
|
||||||
read_line( user_config_dir, "default_path", &default_path );
|
char *result_path = default_path;
|
||||||
|
|
||||||
char *path = new_project_chooser( &default_path );
|
char *path = new_project_chooser( &result_path );
|
||||||
|
|
||||||
if ( path )
|
if ( path )
|
||||||
{
|
{
|
||||||
|
@ -207,10 +207,13 @@ void Mixer::command_new ( void )
|
||||||
|
|
||||||
update_menu();
|
update_menu();
|
||||||
|
|
||||||
if ( default_path )
|
if ( result_path != default_path )
|
||||||
|
free(default_path);
|
||||||
|
|
||||||
|
if ( result_path )
|
||||||
{
|
{
|
||||||
write_line( user_config_dir, "default_path", default_path );
|
write_line( user_config_dir, "default_path", result_path );
|
||||||
free( default_path );
|
free( result_path );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,8 @@ namespace OSC
|
||||||
free( _path );
|
free( _path );
|
||||||
if ( _typespec )
|
if ( _typespec )
|
||||||
free( _typespec );
|
free( _typespec );
|
||||||
|
if ( _documentation )
|
||||||
|
free( _documentation );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********/
|
/**********/
|
||||||
|
@ -228,13 +230,25 @@ namespace OSC
|
||||||
Endpoint::~Endpoint ( )
|
Endpoint::~Endpoint ( )
|
||||||
{
|
{
|
||||||
// lo_server_thread_free( _st );
|
// lo_server_thread_free( _st );
|
||||||
|
|
||||||
|
for ( std::list<Method*>::iterator i = _methods.begin();
|
||||||
|
i != _methods.end();
|
||||||
|
i++ )
|
||||||
|
delete(*i);
|
||||||
|
|
||||||
|
_methods.clear();
|
||||||
|
|
||||||
if ( _server )
|
if ( _server )
|
||||||
{
|
{
|
||||||
lo_server_free( _server );
|
lo_server_free( _server );
|
||||||
_server = 0;
|
_server = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lo_address_free( _addr );
|
||||||
|
_addr = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
OSC::Signal *
|
OSC::Signal *
|
||||||
Endpoint::find_target_by_peer_address ( std::list<Signal*> *l, lo_address addr )
|
Endpoint::find_target_by_peer_address ( std::list<Signal*> *l, lo_address addr )
|
||||||
{
|
{
|
||||||
|
@ -947,13 +961,12 @@ namespace OSC
|
||||||
Signal *
|
Signal *
|
||||||
Endpoint::add_signal ( const char *path, Signal::Direction dir, float min, float max, float default_value, signal_handler handler, void *user_data )
|
Endpoint::add_signal ( const char *path, Signal::Direction dir, float min, float max, float default_value, signal_handler handler, void *user_data )
|
||||||
{
|
{
|
||||||
Signal *o = new Signal( path, dir );
|
|
||||||
|
|
||||||
char *s;
|
char *s;
|
||||||
asprintf( &s, "%s%s", name(), path );
|
asprintf( &s, "%s%s", name(), path );
|
||||||
|
|
||||||
if ( s )
|
Signal *o = new Signal( s, dir );
|
||||||
o->_path = s;
|
|
||||||
|
free(s);
|
||||||
|
|
||||||
o->_handler = handler;
|
o->_handler = handler;
|
||||||
o->_user_data = user_data;
|
o->_user_data = user_data;
|
||||||
|
|
|
@ -159,25 +159,27 @@ write_line ( const char *dir, const char *name, const char *value )
|
||||||
}
|
}
|
||||||
|
|
||||||
/** write a single string to a file */
|
/** write a single string to a file */
|
||||||
void
|
char *
|
||||||
read_line ( const char *dir, const char *name, char **value )
|
read_line ( const char *dir, const char *name )
|
||||||
{
|
{
|
||||||
char path[512];
|
char path[512];
|
||||||
|
|
||||||
*value = 0;
|
|
||||||
|
|
||||||
snprintf( path, sizeof( path ), "%s/%s", dir, name );
|
snprintf( path, sizeof( path ), "%s/%s", dir, name );
|
||||||
|
|
||||||
FILE *fp = fopen( path, "r" );
|
FILE *fp = fopen( path, "r" );
|
||||||
|
|
||||||
if ( ! fp )
|
if ( ! fp )
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
*value = (char*)malloc( 512 );
|
char *value = (char*)malloc( 512 );
|
||||||
|
|
||||||
fgets( *value, 512, fp );
|
value[0] = 0;
|
||||||
|
|
||||||
|
fgets( value, 512, fp );
|
||||||
|
|
||||||
fclose( fp );
|
fclose( fp );
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <sys/statvfs.h>
|
#include <sys/statvfs.h>
|
||||||
|
|
|
@ -30,7 +30,7 @@ int backwards_fgetc ( FILE *fp );
|
||||||
char * backwards_fgets ( char *s, int size, FILE *fp );
|
char * backwards_fgets ( char *s, int size, FILE *fp );
|
||||||
void touch ( int fd );
|
void touch ( int fd );
|
||||||
void write_line ( const char *dir, const char *name, const char *value );
|
void write_line ( const char *dir, const char *name, const char *value );
|
||||||
void read_line ( const char *dir, const char *name, char **value );
|
char * read_line ( const char *dir, const char *name );
|
||||||
size_t free_space ( const char *file );
|
size_t free_space ( const char *file );
|
||||||
size_t total_space ( const char *file );
|
size_t total_space ( const char *file );
|
||||||
int percent_used ( const char *file );
|
int percent_used ( const char *file );
|
||||||
|
|
|
@ -144,7 +144,7 @@ class NSM_Client : public Fl_Group
|
||||||
|
|
||||||
client_name->copy_label( l );
|
client_name->copy_label( l );
|
||||||
|
|
||||||
// _client_label = l;
|
free(l);
|
||||||
|
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
|
@ -240,11 +240,7 @@ public:
|
||||||
void
|
void
|
||||||
pending_command ( const char *command )
|
pending_command ( const char *command )
|
||||||
{
|
{
|
||||||
char *cmd = strdup( command );
|
_progress->copy_label( command );
|
||||||
|
|
||||||
free( (void*)_progress->label() );
|
|
||||||
|
|
||||||
_progress->label( cmd );
|
|
||||||
|
|
||||||
stopped( 0 );
|
stopped( 0 );
|
||||||
|
|
||||||
|
@ -375,7 +371,7 @@ public:
|
||||||
{ Fl_Progress *o = _progress = new Fl_Progress( xx, Y + H * 0.25, 75, H * 0.50, NULL );
|
{ Fl_Progress *o = _progress = new Fl_Progress( xx, Y + H * 0.25, 75, H * 0.50, NULL );
|
||||||
o->box( FL_FLAT_BOX );
|
o->box( FL_FLAT_BOX );
|
||||||
o->color( FL_BLACK );
|
o->color( FL_BLACK );
|
||||||
o->label( strdup( "launch" ) );
|
o->copy_label( "launch" );
|
||||||
o->labelsize( 12 );
|
o->labelsize( 12 );
|
||||||
o->minimum( 0.0f );
|
o->minimum( 0.0f );
|
||||||
o->maximum( 1.0f );
|
o->maximum( 1.0f );
|
||||||
|
@ -462,6 +458,12 @@ public:
|
||||||
|
|
||||||
~NSM_Client ( )
|
~NSM_Client ( )
|
||||||
{
|
{
|
||||||
|
if ( _client_id )
|
||||||
|
{
|
||||||
|
free( _client_id );
|
||||||
|
_client_id = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if ( _client_name )
|
if ( _client_name )
|
||||||
{
|
{
|
||||||
free( _client_name );
|
free( _client_name );
|
||||||
|
@ -925,7 +927,7 @@ public:
|
||||||
o->type( FL_VERTICAL );
|
o->type( FL_VERTICAL );
|
||||||
o->spacing( 2 );
|
o->spacing( 2 );
|
||||||
|
|
||||||
{ Fl_Box *o = new Fl_Box( 0,0,100, 24, "Sessions" );
|
{ new Fl_Box( 0,0,100, 24, "Sessions" );
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -1049,8 +1051,6 @@ public:
|
||||||
|
|
||||||
osc->owner = this;
|
osc->owner = this;
|
||||||
|
|
||||||
osc->url();
|
|
||||||
|
|
||||||
osc->add_method( "/error", "sis", osc_handler, osc, "msg" );
|
osc->add_method( "/error", "sis", osc_handler, osc, "msg" );
|
||||||
osc->add_method( "/reply", "ss", osc_handler, osc, "msg" );
|
osc->add_method( "/reply", "ss", osc_handler, osc, "msg" );
|
||||||
osc->add_method( "/reply", "s", osc_handler, osc, "" );
|
osc->add_method( "/reply", "s", osc_handler, osc, "" );
|
||||||
|
@ -1398,14 +1398,13 @@ main (int argc, char **argv )
|
||||||
{
|
{
|
||||||
/* pass non-option arguments on to daemon */
|
/* pass non-option arguments on to daemon */
|
||||||
|
|
||||||
char **args = (char **)malloc( 4 + argc - optind );
|
char *args[4 + argc - optind];
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
args[i++] = (char*)"nsmd";
|
args[i++] = strdup("nsmd");
|
||||||
args[i++] = (char*)"--gui-url";
|
args[i++] = strdup("--gui-url");
|
||||||
args[i++] = url;
|
args[i++] = url;
|
||||||
|
|
||||||
|
|
||||||
for ( ; optind < argc; i++, optind++ )
|
for ( ; optind < argc; i++, optind++ )
|
||||||
{
|
{
|
||||||
DMESSAGE( "Passing argument: %s", argv[optind] );
|
DMESSAGE( "Passing argument: %s", argv[optind] );
|
||||||
|
@ -1419,6 +1418,8 @@ main (int argc, char **argv )
|
||||||
FATAL( "Error starting process: %s", strerror( errno ) );
|
FATAL( "Error starting process: %s", strerror( errno ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
Fl::add_timeout( 1.0, ping, NULL );
|
Fl::add_timeout( 1.0, ping, NULL );
|
||||||
|
|
|
@ -38,13 +38,16 @@ OSC_Thread::OSC_Thread ( )
|
||||||
|
|
||||||
OSC_Thread::~OSC_Thread ( )
|
OSC_Thread::~OSC_Thread ( )
|
||||||
{
|
{
|
||||||
|
lock();
|
||||||
if ( _shutdown == false )
|
if ( _shutdown == false )
|
||||||
{
|
{
|
||||||
_shutdown = true;
|
_shutdown = true;
|
||||||
_thread.join();
|
_thread.join();
|
||||||
}
|
}
|
||||||
|
unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
OSC_Thread::start ( )
|
OSC_Thread::start ( )
|
||||||
{
|
{
|
||||||
|
|
|
@ -326,6 +326,9 @@ Project::open ( const char *name )
|
||||||
else
|
else
|
||||||
*_created_on = 0;
|
*_created_on = 0;
|
||||||
|
|
||||||
|
free( created_by );
|
||||||
|
free( creation_date );
|
||||||
|
|
||||||
set_name( name );
|
set_name( name );
|
||||||
|
|
||||||
*_path = '\0';
|
*_path = '\0';
|
||||||
|
|
|
@ -331,11 +331,12 @@ pi.run();}
|
||||||
callback {save_timeline_settings();
|
callback {save_timeline_settings();
|
||||||
|
|
||||||
|
|
||||||
char *default_path;
|
char *result_path;
|
||||||
|
|
||||||
read_line( user_config_dir, "default_path", &default_path );
|
char *default_path = read_line( user_config_dir, "default_path" );
|
||||||
|
result_path = default_path;
|
||||||
|
|
||||||
char *path = new_project_chooser( &default_path );
|
char *path = new_project_chooser( &result_path );
|
||||||
|
|
||||||
if ( path )
|
if ( path )
|
||||||
{
|
{
|
||||||
|
@ -344,10 +345,13 @@ char *default_path;
|
||||||
free( path );
|
free( path );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( default_path )
|
if ( reuslt_path != default_path )
|
||||||
|
free(default_path);
|
||||||
|
|
||||||
|
if ( result_path )
|
||||||
{
|
{
|
||||||
write_line( user_config_dir, "default_path", default_path );
|
write_line( user_config_dir, "default_path", result_path );
|
||||||
free( default_path );
|
free( result_path );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -395,6 +395,8 @@ Timeline::menu_cb ( Fl_Menu_ *m )
|
||||||
|
|
||||||
Track *t = new Track( name );
|
Track *t = new Track( name );
|
||||||
|
|
||||||
|
free( name );
|
||||||
|
|
||||||
Audio_Sequence *o = new Audio_Sequence( t );
|
Audio_Sequence *o = new Audio_Sequence( t );
|
||||||
|
|
||||||
add_track( t );
|
add_track( t );
|
||||||
|
@ -582,6 +584,8 @@ Timeline::~Timeline ( )
|
||||||
{
|
{
|
||||||
delete osc_thread;
|
delete osc_thread;
|
||||||
osc_thread = 0;
|
osc_thread = 0;
|
||||||
|
delete osc;
|
||||||
|
osc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : BASE( X, Y, W, H, L )
|
Timeline::Timeline ( int X, int Y, int W, int H, const char* L ) : BASE( X, Y, W, H, L )
|
||||||
|
@ -2095,7 +2099,9 @@ Timeline::init_osc ( const char *osc_port )
|
||||||
|
|
||||||
osc->owner = this;
|
osc->owner = this;
|
||||||
|
|
||||||
printf( "OSC=%s\n", osc->url() );
|
char *url = osc->url();
|
||||||
|
printf( "OSC=%s\n", url );
|
||||||
|
free(url);
|
||||||
|
|
||||||
osc->add_method( "/non/hello", "ssss", &Timeline::osc_non_hello, osc, "" );
|
osc->add_method( "/non/hello", "ssss", &Timeline::osc_non_hello, osc, "" );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue