thread: store struct msg on the stack instead of in the thread
This commit is contained in:
@@ -88,25 +88,25 @@ kern_status_t port_send_msg(
|
||||
}
|
||||
|
||||
struct thread *self = current_thread();
|
||||
struct msg *msg = &self->tr_msg;
|
||||
memset(msg, 0x0, sizeof *msg);
|
||||
msg->msg_status = KMSG_WAIT_RECEIVE;
|
||||
msg->msg_sender_thread = self;
|
||||
msg->msg_sender_port = port;
|
||||
memcpy(&msg->msg_req, in_msg, sizeof msg->msg_req);
|
||||
memcpy(&msg->msg_resp, out_reply, sizeof msg->msg_req);
|
||||
struct msg msg;
|
||||
memset(&msg, 0x0, sizeof msg);
|
||||
msg.msg_status = KMSG_WAIT_RECEIVE;
|
||||
msg.msg_sender_thread = self;
|
||||
msg.msg_sender_port = port;
|
||||
memcpy(&msg.msg_req, in_msg, sizeof msg.msg_req);
|
||||
memcpy(&msg.msg_resp, out_reply, sizeof msg.msg_req);
|
||||
|
||||
unsigned long flags;
|
||||
channel_lock_irqsave(port->p_remote, &flags);
|
||||
port->p_status = PORT_SEND_BLOCKED;
|
||||
channel_enqueue_msg(port->p_remote, msg);
|
||||
channel_enqueue_msg(port->p_remote, &msg);
|
||||
channel_unlock_irqrestore(port->p_remote, flags);
|
||||
|
||||
wait_for_reply(msg, lock_flags);
|
||||
wait_for_reply(&msg, lock_flags);
|
||||
|
||||
channel_lock_irqsave(port->p_remote, &flags);
|
||||
btree_delete(&port->p_remote->c_msg, &msg->msg_node);
|
||||
btree_delete(&port->p_remote->c_msg, &msg.msg_node);
|
||||
channel_unlock_irqrestore(port->p_remote, flags);
|
||||
|
||||
return msg->msg_result;
|
||||
return msg.msg_result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user