Changeset edf7732 in rtems
- Timestamp:
- 09/11/15 08:42:06 (8 years ago)
- Branches:
- 4.11
- Children:
- 9c96ea7
- Parents:
- deb3f29
- git-author:
- Sebastian Huber <sebastian.huber@…> (09/11/15 08:42:06)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (09/11/15 09:31:27)
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/sapi/src/rbheap.c
rdeb3f29 redf7732 8 8 9 9 /* 10 * Copyright (c) 2012 embedded brains GmbH. All rights reserved.10 * Copyright (c) 2012-2015 embedded brains GmbH. All rights reserved. 11 11 * 12 12 * embedded brains GmbH 13 * Obere Lagerstr. 3013 * Dornierstr. 4 14 14 * 82178 Puchheim 15 15 * Germany … … 222 222 223 223 static void check_and_merge( 224 rtems_chain_control *free_chain, 225 rtems_rbtree_control *chunk_tree, 224 rtems_rbheap_control *control, 226 225 rtems_rbheap_chunk *a, 227 rtems_rbheap_chunk *b 228 ) 229 { 230 if (b != NULL_PAGE && rtems_rbheap_is_chunk_free(b)) { 231 if (b->begin < a->begin) { 232 rtems_rbheap_chunk *t = a; 233 234 a = b; 235 b = t; 236 } 237 226 rtems_rbheap_chunk *b, 227 rtems_rbheap_chunk *c 228 ) 229 { 230 if (c != NULL_PAGE && rtems_rbheap_is_chunk_free(c)) { 238 231 a->size += b->size; 239 232 rtems_chain_extract_unprotected(&b->chain_node); 240 add_to_chain(free_chain, b);241 rtems_rbtree_extract( chunk_tree, &b->tree_node);233 rtems_rbheap_add_to_spare_descriptor_chain(control, b); 234 rtems_rbtree_extract(&control->chunk_tree, &b->tree_node); 242 235 } 243 236 } … … 248 241 249 242 if (ptr != NULL) { 250 rtems_chain_control *free_chain = &control->free_chunk_chain; 251 rtems_rbtree_control *chunk_tree = &control->chunk_tree; 252 rtems_rbheap_chunk *chunk = find(chunk_tree, (uintptr_t) ptr); 243 rtems_rbheap_chunk *chunk = find(&control->chunk_tree, (uintptr_t) ptr); 253 244 254 245 if (chunk != NULL_PAGE) { 255 246 if (!rtems_rbheap_is_chunk_free(chunk)) { 256 rtems_rbheap_chunk *pred = get_next(chunk, RBT_LEFT); 257 rtems_rbheap_chunk *succ = get_next(chunk, RBT_RIGHT); 258 259 check_and_merge(free_chain, chunk_tree, chunk, succ); 260 add_to_chain(free_chain, chunk); 261 check_and_merge(free_chain, chunk_tree, chunk, pred); 247 rtems_rbheap_chunk *other; 248 249 add_to_chain(&control->free_chunk_chain, chunk); 250 other = get_next(chunk, RBT_RIGHT); 251 check_and_merge(control, chunk, other, other); 252 other = get_next(chunk, RBT_LEFT); 253 check_and_merge(control, other, chunk, other); 262 254 } else { 263 255 sc = RTEMS_INCORRECT_STATE; -
testsuites/libtests/rbheap01/init.c
rdeb3f29 redf7732 171 171 .chunk_end = chunk_begin + chunk_count 172 172 }; 173 174 rtems_test_assert( 175 rtems_chain_node_count_unprotected(&control->spare_descriptor_chain) 176 == PAGE_COUNT - chunk_count 177 ); 173 178 174 179 _RBTree_Iterate(
Note: See TracChangeset
for help on using the changeset viewer.