annotate TaskManager/kernel/ppe/MailManager.cc @ 603:42c94f85c779

long -> memaddr (64 or 32)
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 07 Nov 2009 14:13:29 +0900
parents 1733f3cbfa28
children a909c50081c2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
1 #include <stdio.h>
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
2 #include <stdlib.h>
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
3 #include "MailManager.h"
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
4
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
5 MailManager::MailManager(void)
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
6 :mailQueuePool(NULL), freeMailQueue(NULL) {}
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
7
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
8 MailManager::~MailManager(void) { destroy(); }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
9
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
10 int
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
11 MailManager::init(int num)
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
12 {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
13 if (!mailQueuePool) {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
14 return extend_pool(num);
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
15 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
16 return 0;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
17 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
18
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
19 int
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
20 MailManager::extend_pool(int num)
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
21 {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
22 MailQueuePtr q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
23
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
24 q = (MailQueuePtr)malloc(sizeof(MailQueue)*(num+1));
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
25
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
26 if (q == NULL) {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
27 return -1;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
28 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
29 q->next = mailQueuePool;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
30 mailQueuePool = q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
31
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
32 /* Connect all free queue in the pool */
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
33 for (q = mailQueuePool + 1; --num > 0; q++) {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
34 q->next = q + 1;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
35 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
36 q->next = freeMailQueue;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
37 freeMailQueue = mailQueuePool + 1;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
38
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
39 return 0;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
40 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
41
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
42 MailQueuePtr
603
42c94f85c779 long -> memaddr (64 or 32)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 602
diff changeset
43 MailManager::create(memaddr data)
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
44 {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
45 MailQueuePtr q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
46
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
47 if (!freeMailQueue) {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
48 extend_pool(30);
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
49 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
50 q = freeMailQueue;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
51 freeMailQueue = freeMailQueue->next;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
52
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
53 q->data = data;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
54 q->next = NULL;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
55
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
56 return q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
57 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
58
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
59 void
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
60 MailManager::free(MailQueuePtr q)
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
61 {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
62 q->next = freeMailQueue;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
63 freeMailQueue = q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
64 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
65
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
66
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
67 void
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
68 MailManager::destroy(void)
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
69 {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
70 MailQueuePtr q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
71
194
gongo@localhost.localdomain
parents: 50
diff changeset
72 #if 0
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
73 for (q = mailQueuePool; q; q = q->next) {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
74 free(q);
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
75 }
194
gongo@localhost.localdomain
parents: 50
diff changeset
76 #else
gongo@localhost.localdomain
parents: 50
diff changeset
77 q = mailQueuePool;
gongo@localhost.localdomain
parents: 50
diff changeset
78 while (q) {
gongo@localhost.localdomain
parents: 50
diff changeset
79 MailQueuePtr tmp = q->next;
gongo@localhost.localdomain
parents: 50
diff changeset
80 free(q);
gongo@localhost.localdomain
parents: 50
diff changeset
81 q = tmp;
gongo@localhost.localdomain
parents: 50
diff changeset
82 }
gongo@localhost.localdomain
parents: 50
diff changeset
83 #endif
50
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
84 freeMailQueue = mailQueuePool = NULL;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
85 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
86
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
87
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
88 MailQueuePtr
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
89 MailManager::append_mailQueue(MailQueuePtr list, MailQueuePtr q)
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
90 {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
91 MailQueuePtr p = list;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
92
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
93 if (p == NULL) {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
94 return q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
95 } else {
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
96 while(p->next) p = p->next;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
97 p->next = q;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
98 return list;
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
99 }
7927e00fb8e2 *** empty log message ***
gongo
parents:
diff changeset
100 }