summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2011-06-21 22:04:17 +0000
committerFrank Gevaerts <frank@gevaerts.be>2011-06-21 22:04:17 +0000
commit7763869e103e5ef07025cd34f82de3924c044411 (patch)
treed243aa8a185091120da397c5071b8aae9608b9cb
parent2bc133dce9271874433cbbaeb74667be4a7d5710 (diff)
downloadrockbox-7763869e103e5ef07025cd34f82de3924c044411.tar.gz
rockbox-7763869e103e5ef07025cd34f82de3924c044411.zip
Workaround/fix (I'm not sure!) for buffer_alloc() returning unaligned addresses in case other parts of the code increase audiobuf behind buffer.c's back.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30049 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/buffer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/firmware/buffer.c b/firmware/buffer.c
index a1a9b0556b..c317cec924 100644
--- a/firmware/buffer.c
+++ b/firmware/buffer.c
@@ -61,7 +61,7 @@ void buffer_init(void)
61 61
62void *buffer_alloc(size_t size) 62void *buffer_alloc(size_t size)
63{ 63{
64 void *retval = audiobuf; 64 void *retval;
65#ifdef BUFFER_ALLOC_DEBUG 65#ifdef BUFFER_ALLOC_DEBUG
66 struct buffer_start_marker *start; 66 struct buffer_start_marker *start;
67 struct buffer_end_marker *end; 67 struct buffer_end_marker *end;
@@ -70,6 +70,11 @@ void *buffer_alloc(size_t size)
70 /* 32-bit aligned */ 70 /* 32-bit aligned */
71 size = (size + 3) & ~3; 71 size = (size + 3) & ~3;
72 72
73 /* Other code touches audiobuf. Make sure it stays aligned */
74 audiobuf = (void *)(((unsigned long)audiobuf + 3) & ~3);
75
76 retval = audiobuf;
77
73#ifdef BUFFER_ALLOC_DEBUG 78#ifdef BUFFER_ALLOC_DEBUG
74 retval +=sizeof(struct buffer_start_marker); 79 retval +=sizeof(struct buffer_start_marker);
75 if(size>0) 80 if(size>0)