From c08299cedd4424e0777090228f46901addf78ee6 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Tue, 16 Aug 2011 13:01:03 +0000 Subject: Dircache: Fix memory leak (and recently panic). If the dircache was interrupted during generation (e.g. through USB insertion), then the allocated buffer was leaked and a new one was allocated for the second cache generation. This causes a panic since r30308 since playback holds the control over the audiobuffer at that time. The fix is to simply check allocated_size instead of dircache_size which is reset to 0 upon cancellation. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30321 a1c6a512-1295-4272-9138-f99709370657 --- firmware/common/dircache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'firmware/common') diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c index f42c79d169..f47e65e428 100644 --- a/firmware/common/dircache.c +++ b/firmware/common/dircache.c @@ -107,7 +107,7 @@ static struct dircache_entry *fd_bindings[MAX_OPEN_FILES]; static bool dircache_initialized = false; static bool dircache_initializing = false; static bool thread_enabled = false; -static unsigned long allocated_size = DIRCACHE_LIMIT; +static unsigned long allocated_size = 0; static unsigned long dircache_size = 0; static unsigned long entry_count = 0; static unsigned long reserve_used = 0; @@ -829,7 +829,7 @@ int dircache_build(int last_size) #endif /* Background build, dircache has been previously allocated */ - if (dircache_size > 0) + if (allocated_size > 0) { d_names_start = d_names_end; dircache_size = 0; -- cgit v1.2.3