summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/src/resource_snapshot.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-27 14:16:12 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-31 08:29:44 +0200
commit23fec9f0e18dc4913fab818118f836af150b98f3 (patch)
tree66228f23bbf654117a33e28db7a017eea21fb785 /cpukit/libcsupport/src/resource_snapshot.c
parentscore: Use thread life protection for API mutexes (diff)
downloadrtems-23fec9f0e18dc4913fab818118f836af150b98f3.tar.bz2
score: PR2152: Use allocator mutex for objects
Use allocator mutex for objects allocate/free. This prevents that the thread dispatch latency depends on the workspace/heap fragmentation.
Diffstat (limited to 'cpukit/libcsupport/src/resource_snapshot.c')
-rw-r--r--cpukit/libcsupport/src/resource_snapshot.c24
1 files changed, 7 insertions, 17 deletions
diff --git a/cpukit/libcsupport/src/resource_snapshot.c b/cpukit/libcsupport/src/resource_snapshot.c
index 8c66f0f7c2..6f5038de31 100644
--- a/cpukit/libcsupport/src/resource_snapshot.c
+++ b/cpukit/libcsupport/src/resource_snapshot.c
@@ -98,38 +98,28 @@ static int open_files(void)
return (int) rtems_libio_number_iops - free_count;
}
-static void free_all_delayed_blocks(void)
-{
- #ifdef HEAP_PROTECTION
- _RTEMS_Lock_allocator();
- _Thread_Disable_dispatch();
- _Heap_Protection_free_all_delayed_blocks( RTEMS_Malloc_Heap );
- _Heap_Protection_free_all_delayed_blocks( &_Workspace_Area );
- _Thread_Enable_dispatch();
- _RTEMS_Unlock_allocator();
- #endif
-}
-
void rtems_resource_snapshot_take(rtems_resource_snapshot *snapshot)
{
uint32_t *active = &snapshot->rtems_api.active_barriers;
size_t i;
- free_all_delayed_blocks();
+ _RTEMS_Lock_allocator();
_Thread_Kill_zombies();
- _Protected_heap_Get_information(RTEMS_Malloc_Heap, &snapshot->heap_info);
-
- _Thread_Disable_dispatch();
+ #ifdef HEAP_PROTECTION
+ _Heap_Protection_free_all_delayed_blocks(RTEMS_Malloc_Heap);
+ _Heap_Protection_free_all_delayed_blocks(&_Workspace_Area);
+ #endif
+ _Heap_Get_information(RTEMS_Malloc_Heap, &snapshot->heap_info);
_Heap_Get_information(&_Workspace_Area, &snapshot->workspace_info);
for (i = 0; i < RTEMS_ARRAY_SIZE(objects_info_table); ++i) {
active [i] = _Objects_Active_count(objects_info_table[i]);
}
- _Thread_Enable_dispatch();
+ _RTEMS_Unlock_allocator();
#ifndef RTEMS_POSIX_API
memset(&snapshot->posix_api, 0, sizeof(snapshot->posix_api));