Fix IPC issues (I suspect looparound issues)
This commit is contained in:
parent
4771173c6c
commit
d2dbbb85a5
@ -56,22 +56,12 @@ void kernel_mailbox_send_msg(Message* user_msg) {
|
|||||||
void kernel_mailbox_get_msg(uint32_t box, Message* recv_msg, uint32_t buffer_sz) {
|
void kernel_mailbox_get_msg(uint32_t box, Message* recv_msg, uint32_t buffer_sz) {
|
||||||
Mailbox mailbox=mailboxes[box];
|
Mailbox mailbox=mailboxes[box];
|
||||||
if (mailbox.msg_store[mailbox.rd].size==0) {
|
if (mailbox.msg_store[mailbox.rd].size==0) {
|
||||||
mailbox.rd++;
|
|
||||||
if (mailbox.rd==mailbox.size) {
|
|
||||||
mailbox.rd=0;
|
|
||||||
}
|
|
||||||
if (mailbox.msg_store[mailbox.rd].size==0) {
|
|
||||||
mailbox.rd--;
|
|
||||||
if (mailbox.rd==(2^32)-1) {
|
|
||||||
mailbox.rd=mailbox.size-1;
|
|
||||||
}
|
|
||||||
recv_msg->size=0;
|
recv_msg->size=0;
|
||||||
recv_msg->from=0;
|
recv_msg->from=0;
|
||||||
serial_printf("Box %d attempted to get a message, but there were none.\n",box);
|
serial_printf("Box %d attempted to get a message, but there were none.\n",box);
|
||||||
mailboxes[box]=mailbox;
|
mailboxes[box]=mailbox;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
recv_msg->from=mailbox.msg_store[mailbox.rd].from;
|
recv_msg->from=mailbox.msg_store[mailbox.rd].from;
|
||||||
recv_msg->to=mailbox.msg_store[mailbox.rd].to;
|
recv_msg->to=mailbox.msg_store[mailbox.rd].to;
|
||||||
recv_msg->size=mailbox.msg_store[mailbox.rd].size;
|
recv_msg->size=mailbox.msg_store[mailbox.rd].size;
|
||||||
@ -90,10 +80,7 @@ void kernel_mailbox_get_msg(uint32_t box, Message* recv_msg, uint32_t buffer_sz)
|
|||||||
mailbox.rd=0;
|
mailbox.rd=0;
|
||||||
}
|
}
|
||||||
if (mailbox.rd>mailbox.wr) {
|
if (mailbox.rd>mailbox.wr) {
|
||||||
mailbox.rd=mailbox.wr-1;
|
mailbox.rd=mailbox.wr;
|
||||||
if (mailbox.rd==(2^32)-1) {
|
|
||||||
mailbox.rd=mailbox.size-1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
serial_printf("Box %d got a message from box %d.\n",box,recv_msg->from);
|
serial_printf("Box %d got a message from box %d.\n",box,recv_msg->from);
|
||||||
mailboxes[box]=mailbox;
|
mailboxes[box]=mailbox;
|
||||||
|
Loading…
Reference in New Issue
Block a user