runtime: save now on RPC

This commit is contained in:
Sebastien Bourdeauducq 2016-06-19 19:29:46 +08:00
parent 0acc52d513
commit 155794a671
3 changed files with 8 additions and 0 deletions

View File

@ -475,6 +475,7 @@ void send_rpc(int service, const char *tag, ...)
{ {
struct msg_rpc_send request; struct msg_rpc_send request;
request.now = now;
if(service != 0) if(service != 0)
request.type = MESSAGE_TYPE_RPC_SEND; request.type = MESSAGE_TYPE_RPC_SEND;
else else

View File

@ -87,6 +87,7 @@ struct msg_watchdog_clear {
struct msg_rpc_send { struct msg_rpc_send {
int type; int type;
long long int now;
int service; int service;
const char *tag; const char *tag;
va_list args; va_list args;

View File

@ -983,6 +983,12 @@ static int process_kmsg(struct msg_base *umsg)
case MESSAGE_TYPE_RPC_BATCH: { case MESSAGE_TYPE_RPC_BATCH: {
struct msg_rpc_send *msg = (struct msg_rpc_send *)umsg; struct msg_rpc_send *msg = (struct msg_rpc_send *)umsg;
/*
* save now in case the RPC stops the kernel
* (e.g. pause with preemption)
*/
now = msg->now;
if(!send_rpc_request(msg->service, msg->tag, msg->args)) { if(!send_rpc_request(msg->service, msg->tag, msg->args)) {
core_log("Failed to send RPC request (service %d, tag %s)\n", core_log("Failed to send RPC request (service %d, tag %s)\n",
msg->service, msg->tag); msg->service, msg->tag);