# HG changeset patch # User Shinji KONO # Date 1280911356 -32400 # Node ID 58ff7b6fdbce2de79b568202ec8bccd01830b077 # Parent 559d041313dc6114a0f86e1613310aab32e84cbd add freeOnce() diff -r 559d041313dc -r 58ff7b6fdbce TaskManager/kernel/ppe/HTask.h --- a/TaskManager/kernel/ppe/HTask.h Wed Aug 04 17:07:37 2010 +0900 +++ b/TaskManager/kernel/ppe/HTask.h Wed Aug 04 17:42:36 2010 +0900 @@ -68,6 +68,11 @@ wait_i = new QueueInfo(taskQueuePool); } + void freeOnce() { + delete wait_me; + delete wait_i; + } + private: int param_index; diff -r 559d041313dc -r 58ff7b6fdbce TaskManager/kernel/ppe/QueueInfo.h --- a/TaskManager/kernel/ppe/QueueInfo.h Wed Aug 04 17:07:37 2010 +0900 +++ b/TaskManager/kernel/ppe/QueueInfo.h Wed Aug 04 17:42:36 2010 +0900 @@ -14,6 +14,9 @@ T *next; T *prev; + void initOnce(); // to initialize object in pool + void freeOnce(); // to destroy object in pool + // virual void init(); }; #endif @@ -22,9 +25,17 @@ public: /* constructor */ + + /** + singleton constructor + use this in non initialize envrionment is wrong. + */ QueueInfo(){ queueInfoInit(); } + /** + normal constructor requires + */ QueueInfo(QueueInfo *p) { queueInfoInit(); queuePool = p; @@ -58,6 +69,7 @@ private: /* variables */ + /* we cannot use static in template */ /* static */ QueueInfo *queuePool; T* first; T* last; @@ -76,9 +88,15 @@ #include -// Singleton T Pool -// you have to define it at where you want to use. -// templatestatic QueueInfo QueueInfo::queuePool; +/** + singleton constructor + all queueInfo should share this as a pool. + + exteren QueueInfo pool; + QueueInfo pool = new QueueInfo(); + + use this in non initialize envrionment is wrong. +*/ templatevoid QueueInfo::queueInfoInit() { // 最初の一つは自分 @@ -92,11 +110,16 @@ for(T * p = queuePool->waiter; p; ) { T * next = p->waiter; p->waiter = NULL; + p->freeOnce(); free(p); p = next; } } +/** + all pools are shared among QueueInfo (separated by size and type). + it automatically extended by 64. + */ templateint QueueInfo::extend_pool(int num) { diff -r 559d041313dc -r 58ff7b6fdbce TaskManager/kernel/ppe/TaskList.h --- a/TaskManager/kernel/ppe/TaskList.h Wed Aug 04 17:07:37 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskList.h Wed Aug 04 17:42:36 2010 +0900 @@ -20,6 +20,8 @@ void init() { length = 0; waiter=this; } void initOnce() { } + void freeOnce() {} + } ; typedef TaskList* TaskListPtr; diff -r 559d041313dc -r 58ff7b6fdbce TaskManager/kernel/ppe/TaskQueue.h --- a/TaskManager/kernel/ppe/TaskQueue.h Wed Aug 04 17:07:37 2010 +0900 +++ b/TaskManager/kernel/ppe/TaskQueue.h Wed Aug 04 17:42:36 2010 +0900 @@ -24,6 +24,7 @@ void init() { } void initOnce() { } + void freeOnce() {} TaskQueue *init(HTask *task) { this->task = task;