summaryrefslogtreecommitdiffstats
path: root/cpukit/score
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-24 16:48:17 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-06-25 17:03:21 +0200
commit1d48e25d6ba51e92773e28c5d561557491fc7a9d (patch)
tree465948fa7cb9f81c827e915cbe01b13ab06e3600 /cpukit/score
parenttermios: Update due to API changes (diff)
downloadrtems-1d48e25d6ba51e92773e28c5d561557491fc7a9d.tar.bz2
heap: Workaround for workspace protection
Diffstat (limited to 'cpukit/score')
-rw-r--r--cpukit/score/src/heapfree.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/cpukit/score/src/heapfree.c b/cpukit/score/src/heapfree.c
index 30a84a08b4..7ff1363195 100644
--- a/cpukit/score/src/heapfree.c
+++ b/cpukit/score/src/heapfree.c
@@ -81,6 +81,7 @@
)
{
bool do_free = true;
+ Heap_Block *const next = block->Protection_begin.next_delayed_free_block;
/*
* Sometimes after a free the allocated area is still in use. An example
@@ -88,7 +89,6 @@
* disable level is a way to detect this use case.
*/
if ( _Thread_Dispatch_is_enabled() ) {
- Heap_Block *const next = block->Protection_begin.next_delayed_free_block;
if ( next == NULL ) {
_Heap_Protection_delay_block_free( heap, block );
do_free = false;
@@ -97,6 +97,12 @@
} else {
_Heap_Protection_block_error( heap, block );
}
+ } else if ( next == NULL ) {
+ /*
+ * This is a hack to prevent heavy workspace fragmentation which would
+ * lead to test suite failures.
+ */
+ _Heap_Protection_free_all_delayed_blocks( heap );
}
return do_free;