From 2a8eacdbfc5d98b016c480ddaddff100301f721f Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Thu, 17 Nov 2011 17:55:02 +0000 Subject: Buflib: Make shrinking and buflib_available() smarter. * shrinking now considers freespace just before the alloc-to-be-shrinked, that means less (or sometimes none at all) is taken from the audio buffer. * core_available() now searches for the best free space, instead of simply the end, i.e. it will not return 0 if the audio buffer is allocated and there's free space before it. It also runs a compaction to ensure maximum contiguous memory. audio_buffer_available() is also enhanced. It now considers the 256K reserve buffer, and returns free buflib space instead if the audio buffer is short. This all fixes the root problem of FS#12344 (Sansa Clip+: PANIC occurred when dircache is enabled), that alloced from the audio buffer, even if it was very short and buflib had many more available as free space before it. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31006 a1c6a512-1295-4272-9138-f99709370657 --- apps/menus/main_menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'apps/menus/main_menu.c') diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c index 8053bf0cf8..bb8ea276fb 100644 --- a/apps/menus/main_menu.c +++ b/apps/menus/main_menu.c @@ -179,7 +179,7 @@ static const char* info_getname(int selected_item, void *data, case INFO_BUFFER: /* buffer */ { - long kib = audio_buffer_available() / 1024; /* to KiB */ + long kib = audio_buffer_size() / 1024; /* to KiB */ output_dyn_value(s1, sizeof(s1), kib, kbyte_units, true); snprintf(buffer, buffer_len, "%s %s", str(LANG_BUFFER_STAT), s1); } @@ -261,7 +261,7 @@ static int info_speak_item(int selected_item, void * data) case INFO_BUFFER: /* buffer */ { talk_id(LANG_BUFFER_STAT, false); - long kib = audio_buffer_available() / 1024; /* to KiB */ + long kib = audio_buffer_size() / 1024; /* to KiB */ output_dyn_value(NULL, 0, kib, kbyte_units, true); break; } -- cgit v1.2.3