archive: close archive when stream is closed

Fixes a memory leak: the "archive" input plugin opens the archive, but
never closes it.  This patch moves the responsibility for doing that
to archive_plugin.open_stream().  This is an slight internal API
change, but it is the simplest and least intrusive fix for the memory
leak.
This commit is contained in:
Max Kellermann 2009-12-15 19:45:50 +01:00
parent 6c0f50efb5
commit 3411f6cffd
5 changed files with 11 additions and 0 deletions

2
NEWS
View File

@ -1,4 +1,6 @@
ver 0.15.7 (2009/??/??)
* archive:
- close archive when stream is closed
* input:
- file: don't fall back to parent directory
- archive: fixed memory leak in error handler

View File

@ -173,6 +173,8 @@ bz2_is_close(struct input_stream *is)
bz2_context *context = (bz2_context *) is->data;
bz2_destroy(context);
is->data = NULL;
bz2_close((struct archive_file *)context);
}
static int

View File

@ -165,6 +165,8 @@ iso_is_close(struct input_stream *is)
{
iso_context *context = (iso_context *) is->data;
g_free(context->statbuf);
iso_close((struct archive_file *)context);
}

View File

@ -133,6 +133,8 @@ zip_is_close(struct input_stream *is)
{
zip_context *context = (zip_context *) is->data;
zzip_file_close (context->file);
zip_close((struct archive_file *)context);
}
static size_t

View File

@ -73,6 +73,9 @@ struct archive_plugin {
/**
* Opens an input_stream of a file within the archive.
*
* If this function succeeds, then the #input_stream "owns"
* the archive file and will automatically close it.
*
* @param path the path within the archive
*/
bool (*open_stream)(struct archive_file *, struct input_stream *is,