Mercurial > hg > Members > kono > Cerium
diff example/many_task/sort.cc @ 941:0c11c2fd7e63
add no_auto_free flag on HTask
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 31 Jul 2010 17:50:38 +0900 |
parents | 0d404f6c36a8 |
children | a9c7784e5dae |
line wrap: on
line diff
--- a/example/many_task/sort.cc Sat Jul 31 16:44:10 2010 +0900 +++ b/example/many_task/sort.cc Sat Jul 31 17:50:38 2010 +0900 @@ -106,6 +106,7 @@ if (split_num > 1) { for (int i = 0; i < half_num-1; i++) { + if (bsort[i]) manager->free_htask(bsort[i]); bsort[i] = manager->create_task(QUICK_SORT, (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num, (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*block_num); @@ -115,6 +116,7 @@ { int i = half_num-1; + if (bsort[i]) manager->free_htask(bsort[i]); bsort[i] = manager->create_task(QUICK_SORT, (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num, (memaddr)&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num); @@ -124,6 +126,7 @@ for (int i = 0; i < half_num; i++) { bsort[i]->wait_for(fsort[i]); bsort[i]->wait_for(fsort[i+1]); + bsort[i]->no_auto_free(); bsort[i]->spawn(); } } @@ -186,9 +189,9 @@ } if (split_num > 1) { - HTaskPtr bsort[half_num]; for (int i = 0; i < half_num-1; i++) { + if (bsort[i]) manager->free_htask(bsort[i]); bsort[i] = manager->create_task(QUICK_SORT); bsort[i]->add_inData(&data[i*block_num+half_block_num], sizeof(Data)*block_num); @@ -201,6 +204,7 @@ { int i = half_num-1; + if (bsort[i]) manager->free_htask(bsort[i]); bsort[i] = manager->create_task(QUICK_SORT); bsort[i]->add_inData(&data[i*block_num+half_block_num], sizeof(Data)*last_half_block_num); @@ -213,6 +217,7 @@ for (int i = 0; i < half_num; i++) { bsort[i]->wait_for(fsort[i]); bsort[i]->wait_for(fsort[i+1]); + bsort[i]->no_auto_free(); bsort[i]->spawn(); } }