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();
 	}
     }