Changes: return application's exit status to invoker

pull/1/head
Alexey Shilov 15 years ago
parent bbe2bb8463
commit f8f18c9026

@ -223,6 +223,22 @@ static uint32_t invoker_recv_pid(int fd)
return pid;
}
static uint32_t invoker_recv_exit(int fd)
{
uint32_t action, status;
/* Receive action. */
invoke_recv_msg(fd, &action);
if (action != INVOKER_MSG_EXIT)
die(1, "receiving bad exit status (%08x)\n", action);
/* Receive pid. */
invoke_recv_msg(fd, &status);
return status;
}
static bool invoker_send_magic(int fd, int options)
{
// Send magic.
@ -390,6 +406,8 @@ static unsigned int get_delay(char *delay_arg)
static int invoke(int prog_argc, char **prog_argv, char *prog_name,
enum APP_TYPE app_type, int magic_options, bool wait_term)
{
int status = 0;
if (prog_name && prog_argv)
{
errno = 0;
@ -425,8 +443,8 @@ static int invoke(int prog_argc, char **prog_argv, char *prog_name,
// forward signals to invoked process
sigs_init();
char dummy_buf = 0;
recv(fd, (void *)&dummy_buf, 0, MSG_WAITALL);
// wait for exit status from invoked application
status = invoker_recv_exit(fd);
// restore default signal handlers
sigs_restore();
@ -434,6 +452,7 @@ static int invoke(int prog_argc, char **prog_argv, char *prog_name,
close(fd);
}
return status;
}
int main(int argc, char *argv[])

@ -87,7 +87,7 @@ void Booster::run()
if (m_conn->isReportAppExitStatusNeeded())
{
m_conn->reportAppExitStatus(ret_val);
m_conn->sendAppExitStatus(ret_val);
m_conn->closeConn();
Connection::closeAllSockets();
}

@ -234,6 +234,14 @@ bool Connection::sendPid(pid_t pid)
return true;
}
bool Connection::sendAppExitStatus(int status)
{
sendMsg(INVOKER_MSG_EXIT);
sendMsg(status);
return true;
}
int Connection::receiveMagic()
{
uint32_t magic = 0;
@ -525,8 +533,3 @@ bool Connection::isReportAppExitStatusNeeded()
return m_sendPid;
}
void Connection::reportAppExitStatus(int status)
{
//todo: send status to invoker
}

@ -80,7 +80,7 @@ public:
bool isReportAppExitStatusNeeded();
//! \brief Send application exit status to invoker
void reportAppExitStatus(int status);
bool sendAppExitStatus(int status);
/*! \brief Initialize a file socket.
* \param socketId Path to the socket file

Loading…
Cancel
Save