Browse Source

Fix memory leaks.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2809 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
2bac738cde
9 changed files with 76 additions and 34 deletions
  1. +1
    -0
      ChangeLog
  2. +4
    -2
      common/JackAudioAdapterFactory.cpp
  3. +13
    -0
      common/JackDriverLoader.cpp
  4. +1
    -0
      common/JackDriverLoader.h
  5. +3
    -1
      common/JackNetAdapter.cpp
  6. +3
    -1
      common/JackNetManager.cpp
  7. +36
    -30
      common/JackServerGlobals.cpp
  8. +14
    -0
      common/JackTools.cpp
  9. +1
    -0
      common/JackTools.h

+ 1
- 0
ChangeLog View File

@@ -25,6 +25,7 @@ Florian Faber
2008-08-26 Stephane Letz <letz@grame.fr>
* Better parameter handling in JackCoreAudioAdapter.
* Fix memory leaks.

2008-08-22 Stephane Letz <letz@grame.fr>


+ 4
- 2
common/JackAudioAdapterFactory.cpp View File

@@ -66,7 +66,7 @@ extern "C"
adapter = new Jack::JackAudioAdapter(jack_client, new Jack::JackCoreAudioAdapter(buffer_size, sample_rate, params));
#endif
assert(adapter);
if (adapter->Open() == 0)
return 0;
else
@@ -93,7 +93,9 @@ extern "C"
jack_error("Internal client : JackArgParser::ParseParams error.");
}

return jack_internal_initialize(jack_client, params);
int res = jack_internal_initialize(jack_client, params);
parser.FreeParams(params);
return res;
}

EXPORT void jack_finish(void* arg)


+ 13
- 0
common/JackDriverLoader.cpp View File

@@ -90,6 +90,19 @@ jack_print_driver_param_usage (jack_driver_desc_t * desc, unsigned long param, F
fprintf (file, "%s\n", desc->params[param].long_desc);
}

EXPORT void jack_free_driver_params(JSList * driver_params)
{
JSList *node_ptr = driver_params;
JSList *next_node_ptr;
while (node_ptr) {
next_node_ptr = node_ptr->next;
free(node_ptr->data);
free(node_ptr);
node_ptr = next_node_ptr;
}
}

int
jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr)
{


+ 1
- 0
common/JackDriverLoader.h View File

@@ -65,6 +65,7 @@ jack_driver_desc_t * jack_drivers_get_descriptor (JSList * drivers, const char *
JSList * jack_drivers_load (JSList * drivers);
jack_driver_info_t * jack_load_driver (jack_driver_desc_t * driver_desc);
EXPORT int jackctl_parse_driver_params (jackctl_driver * driver_ptr, int argc, char* argv[]);
EXPORT void jack_free_driver_params(JSList * param_ptr);

#endif


+ 3
- 1
common/JackNetAdapter.cpp View File

@@ -545,7 +545,9 @@ extern "C"
if ( parser.ParseParams ( desc, &params ) != 0 )
jack_error ( "Internal client : JackArgParser::ParseParams error." );

return jack_internal_initialize ( jack_client, params );
int res = jack_internal_initialize(jack_client, params);
parser.FreeParams(params);
return res;
}

EXPORT void jack_finish ( void* arg )


+ 3
- 1
common/JackNetManager.cpp View File

@@ -749,7 +749,9 @@ extern "C"
jack_error ( "Internal client JackArgParser::ParseParams error." );
}

return jack_internal_initialize ( jack_client, params );
int res = jack_internal_initialize(jack_client, params);
parser.FreeParams(params);
return res;
}

EXPORT void jack_finish ( void* arg )


+ 36
- 30
common/JackServerGlobals.cpp View File

@@ -79,20 +79,40 @@ bool JackServerGlobals::Init()
if (JackServer::fInstance != NULL)
return true;
int realtime = 0;
int client_timeout = 0; /* msecs; if zero, use period size. */
int realtime_priority = 10;
int verbose_aux = 0;
int do_mlock = 1;
unsigned int port_max = 128;
int loopback = 0;
int do_unlock = 0;
int temporary = 0;
int opt = 0;
int option_index = 0;
int seen_driver = 0;
char *driver_name = NULL;
char **driver_args = NULL;
JSList* driver_params;
int driver_nargs = 1;
JSList* drivers = NULL;
int show_version = 0;
int sync = 0;
int rc, i;
int ret;

FILE* fp = 0;
char filename[255];
char buffer[255];
int argc = 0;
char* argv[32];
// Otherwise first client starts the server
if (fClientCount++ == 0) {

jack_log("JackServerGlobals Init");
int realtime = 0;
int client_timeout = 0; /* msecs; if zero, use period size. */
int realtime_priority = 10;
int verbose_aux = 0;
int do_mlock = 1;
unsigned int port_max = 128;
int loopback = 0;
int do_unlock = 0;
int temporary = 0;

jack_driver_desc_t* driver_desc;
const char *options = "-ad:P:uvshVRL:STFl:t:mn:p:";
static struct option long_options[] = {
@@ -114,25 +134,7 @@ bool JackServerGlobals::Init()
{ "sync", 0, 0, 'S' },
{ 0, 0, 0, 0 }
};
int opt = 0;
int option_index = 0;
int seen_driver = 0;
char *driver_name = NULL;
char **driver_args = NULL;
JSList* driver_params;
int driver_nargs = 1;
JSList* drivers = NULL;
int show_version = 0;
int sync = 0;
int rc, i;
int ret;

FILE* fp = 0;
char filename[255];
char buffer[255];
int argc = 0;
char* argv[32];

snprintf(filename, 255, "%s/.jackdrc", getenv("HOME"));
fp = fopen(filename, "r");

@@ -305,10 +307,14 @@ bool JackServerGlobals::Init()
goto error;
}
}

if (driver_params)
jack_free_driver_params(driver_params);
return true;

error:
if (driver_params)
jack_free_driver_params(driver_params);
fClientCount--;
return false;
}


+ 14
- 0
common/JackTools.cpp View File

@@ -22,6 +22,7 @@
#endif

#include "JackConstants.h"
#include "JackDriverLoader.h"
#include "JackTools.h"
#include <stdlib.h>
#include <stdio.h>
@@ -382,6 +383,19 @@ namespace Jack {

return 0;
}
void JackArgParser::FreeParams ( JSList* param_list )
{
JSList *node_ptr = param_list;
JSList *next_node_ptr;
while (node_ptr) {
next_node_ptr = node_ptr->next;
free(node_ptr->data);
free(node_ptr);
node_ptr = next_node_ptr;
}
}

}


+ 1
- 0
common/JackTools.h View File

@@ -86,6 +86,7 @@ namespace Jack
int GetArgv ( char** argv );
void DeleteArgv ( const char** argv );
int ParseParams ( jack_driver_desc_t* desc, JSList** param_list );
void FreeParams ( JSList* param_list );
};

/*!


Loading…
Cancel
Save