diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2011-06-21 22:04:17 +0000 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2011-06-21 22:04:17 +0000 |
commit | 7763869e103e5ef07025cd34f82de3924c044411 (patch) | |
tree | d243aa8a185091120da397c5071b8aae9608b9cb | |
parent | 2bc133dce9271874433cbbaeb74667be4a7d5710 (diff) | |
download | rockbox-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.c | 7 |
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 | ||
62 | void *buffer_alloc(size_t size) | 62 | void *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) |