diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-27 14:16:12 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-31 08:29:44 +0200 |
commit | 23fec9f0e18dc4913fab818118f836af150b98f3 (patch) | |
tree | 66228f23bbf654117a33e28db7a017eea21fb785 /cpukit/libcsupport/src/resource_snapshot.c | |
parent | score: Use thread life protection for API mutexes (diff) | |
download | rtems-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.c | 24 |
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)); |