Mercurial > hg > Members > kono > Cerium
comparison TaskManager/kernel/ppe/MailManager.cc @ 649:55f898a58748
MailManager Fifo fix
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 22 Nov 2009 18:53:05 +0900 |
parents | 7c9ded1ea750 |
children | c13bbb7d70b3 |
comparison
equal
deleted
inserted
replaced
648:f1e10ba45d28 | 649:55f898a58748 |
---|---|
27 | 27 |
28 void | 28 void |
29 MailManager::send(memaddr data) | 29 MailManager::send(memaddr data) |
30 { | 30 { |
31 queue[write++] = data; | 31 queue[write++] = data; |
32 write &= mask; | |
32 if (write==read) { | 33 if (write==read) { |
33 | 34 memaddr *newq = New(memaddr,size*2); |
34 calc_mask(size*2); | 35 int i = 0; |
35 | 36 while(i<size) { |
36 memaddr *newq = New(memaddr,size); | 37 newq[i++] = queue[read++]; |
37 int i; | 38 read &= mask; |
38 while(count()>0) { | |
39 newq[i++] = recv(); | |
40 } | 39 } |
41 read = 0; write = i; | 40 read = 0; write = i; |
41 calc_mask(size*2); | |
42 free(queue); | 42 free(queue); |
43 queue = newq; | 43 queue = newq; |
44 } | 44 } |
45 write &= mask; | |
46 } | 45 } |
47 | 46 |
48 memaddr | 47 memaddr |
49 MailManager::recv() | 48 MailManager::recv() |
50 { | 49 { |