summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonius Hellmann <toni@rockbox.org>2009-02-22 10:12:34 +0000
committerAntonius Hellmann <toni@rockbox.org>2009-02-22 10:12:34 +0000
commit0055f13707bdeeca5893c57541d73a84b6069f9f (patch)
treec5721ebf19612cdb7b72a40350f31273cff3c9b6
parentf53630a168a6793da9fb8e5d1318c03a78cf0cb6 (diff)
downloadrockbox-0055f13707bdeeca5893c57541d73a84b6069f9f.tar.gz
rockbox-0055f13707bdeeca5893c57541d73a84b6069f9f.tar.bz2
rockbox-0055f13707bdeeca5893c57541d73a84b6069f9f.zip
This should fix the occasional data aborts mainly in conjunction with AlbumArt on PP targets. See FS#9827 for details.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20081 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/buffering.c12
1 files changed, 3 insertions, 9 deletions
diff --git a/apps/buffering.c b/apps/buffering.c
index d715456efb..ba9ed5e57e 100644
--- a/apps/buffering.c
+++ b/apps/buffering.c
@@ -251,17 +251,11 @@ static struct memory_handle *add_handle(size_t data_size, bool can_wrap,
len = data_size + sizeof(struct memory_handle);
/* First, will the handle wrap? */
- overlap = RINGBUF_ADD_CROSS(new_widx, sizeof(struct memory_handle),
- buffer_len - 1);
/* If the handle would wrap, move to the beginning of the buffer,
- * otherwise check if the data can/would wrap and move it to the
- * beginning if needed */
- if (overlap > 0) {
+ * or if the data must not but would wrap, move it to the beginning */
+ if( (new_widx + sizeof(struct memory_handle) > buffer_len) ||
+ (!can_wrap && (new_widx + len > buffer_len)) ) {
new_widx = 0;
- } else if (!can_wrap) {
- overlap = RINGBUF_ADD_CROSS(new_widx, len, buffer_len - 1);
- if (overlap > 0)
- new_widx += data_size - overlap;
}
/* How far we shifted buf_widx to align things, must be < buffer_len */