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 {