Fix minor valgrind issues

- Fix valgrind invalid write of 1 byte.
- Fix a few plugin related memory leaks.
This commit is contained in:
Jan Vidar Krey 2011-12-01 13:37:07 +01:00
parent c17b43e77f
commit 9f16298688
4 changed files with 15 additions and 1 deletions

View File

@ -50,16 +50,19 @@ struct uhub_plugin* plugin_open(const char* filename)
return 0; return 0;
} }
plugin->filename = strdup(filename);
return plugin; return plugin;
} }
void plugin_close(struct uhub_plugin* plugin) void plugin_close(struct uhub_plugin* plugin)
{ {
LOG_TRACE("plugin_close: \"%s\"", plugin->filename);
#ifdef HAVE_DLOPEN #ifdef HAVE_DLOPEN
dlclose(plugin->handle); dlclose(plugin->handle);
#else #else
FreeLibrary((HMODULE) plugin->handle); FreeLibrary((HMODULE) plugin->handle);
#endif #endif
hub_free(plugin->filename);
hub_free(plugin); hub_free(plugin);
} }
@ -127,6 +130,7 @@ void plugin_unload(struct plugin_handle* plugin)
{ {
plugin->handle->unregister(plugin); plugin->handle->unregister(plugin);
plugin_close(plugin->handle); plugin_close(plugin->handle);
hub_free(plugin);
} }
static int plugin_parse_line(char* line, int line_count, void* ptr_data) static int plugin_parse_line(char* line, int line_count, void* ptr_data)
@ -186,7 +190,12 @@ int plugin_initialize(struct hub_config* config, struct uhub_plugins* handle)
ret = file_read_lines(config->file_plugins, handle, &plugin_parse_line); ret = file_read_lines(config->file_plugins, handle, &plugin_parse_line);
if (ret == -1) if (ret == -1)
{
list_clear(handle->loaded, hub_free);
list_destroy(handle->loaded);
handle->loaded = 0;
return -1; return -1;
}
} }
return 0; return 0;
} }

View File

@ -30,6 +30,7 @@ struct uhub_plugin
{ {
void* handle; void* handle;
plugin_unregister_f unregister; plugin_unregister_f unregister;
char* filename;
}; };
struct uhub_plugins struct uhub_plugins

View File

@ -100,6 +100,8 @@ static struct log_data* parse_config(const char* line, struct plugin_handle* plu
token = cfg_token_get_next(tokens); token = cfg_token_get_next(tokens);
} }
cfg_tokens_free(tokens);
if (data->logmode == mode_file) if (data->logmode == mode_file)
{ {
if ((data->logmode == mode_file && !data->logfile)) if ((data->logmode == mode_file && !data->logfile))

View File

@ -30,7 +30,7 @@ struct cfg_tokens
struct cfg_tokens* cfg_tokenize(const char* line) struct cfg_tokens* cfg_tokenize(const char* line)
{ {
struct cfg_tokens* tokens = (struct cfg_tokens*) hub_malloc_zero(sizeof(struct cfg_tokens)); struct cfg_tokens* tokens = (struct cfg_tokens*) hub_malloc_zero(sizeof(struct cfg_tokens));
char* buffer = (char*) hub_malloc_zero(strlen(line)); char* buffer = (char*) hub_malloc_zero(strlen(line) + 1);
char* out = buffer; char* out = buffer;
const char* p = line; const char* p = line;
int backslash = 0; int backslash = 0;
@ -68,6 +68,7 @@ struct cfg_tokens* cfg_tokenize(const char* line)
else else
{ {
RESET_TOKEN; RESET_TOKEN;
hub_free(buffer);
return tokens; return tokens;
} }
break; break;
@ -115,6 +116,7 @@ struct cfg_tokens* cfg_tokenize(const char* line)
} }
RESET_TOKEN; RESET_TOKEN;
hub_free(buffer);
return tokens; return tokens;
} }