&dummy_domain_id);
reply:
- reply_err = b->tx_vtbl.spawn_with_caps_reply(b, NOP_CONT, domain_cap, err);
+ reply_err = b->tx_vtbl.spawn_reply(b, NOP_CONT, err);
if (err_is_fail(reply_err)) {
DEBUG_ERR(err, "failed to send spawn_with_caps_reply");
}
&dummy_domain_id);
reply:
- reply_err = b->tx_vtbl.spawn_reply(b, NOP_CONT, domain_cap, err);
+ reply_err = b->tx_vtbl.spawn_reply(b, NOP_CONT, err);
if (err_is_fail(reply_err)) {
DEBUG_ERR(err, "failed to send spawn_reply");
}
}
reply:
- reply_err = b->tx_vtbl.span_reply(b, NOP_CONT, domain_cap, err);
+ reply_err = b->tx_vtbl.spawn_reply(b, NOP_CONT, err);
if (err_is_fail(reply_err)) {
DEBUG_ERR(err, "failed to send span_reply");
}
}
}
-static errval_t kill_handler_common(struct capref procmng_cap,
- struct capref domain_cap)
+static void kill_request_handler(struct spawn_binding *b,
+ struct capref procmng_cap,
+ struct capref victim_domain_cap)
{
+ errval_t err, reply_err;
struct capability ret;
- errval_t err = monitor_cap_identify_remote(procmng_cap, &ret);
+ err = monitor_cap_identify_remote(procmng_cap, &ret);
if (err_is_fail(err)) {
- return err_push(err, SPAWN_ERR_IDENTIFY_PROC_MNGR_CAP);
+ err = err_push(err, SPAWN_ERR_IDENTIFY_PROC_MNGR_CAP);
+ goto reply;
}
if (ret.type != ObjType_ProcessManager) {
- return SPAWN_ERR_NOT_PROC_MNGR;
+ err = SPAWN_ERR_NOT_PROC_MNGR;
+ goto reply;
}
struct ps_entry *pe;
- err = ps_get_domain(domain_cap, &pe, NULL);
+ err = ps_get_domain(victim_domain_cap, &pe, NULL);
if (err_is_fail(err)) {
- return err_push(err, SPAWN_ERR_DOMAIN_NOTFOUND);
+ err = err_push(err, SPAWN_ERR_DOMAIN_NOTFOUND);
+ goto reply;
}
cleanup_cap(pe->dcb);
- return SYS_ERR_OK;
-}
-
-static void kill_request_handler(struct spawn_binding *b,
- struct capref procmng_cap,
- struct capref victim_domain_cap)
-{
- errval_t err = kill_handler_common(procmng_cap, victim_domain_cap);
- errval_t reply_err = b->tx_vtbl.kill_reply(b, NOP_CONT, victim_domain_cap,
- err);
+reply:
+ reply_err = b->tx_vtbl.spawn_reply(b, NOP_CONT, err);
if (err_is_fail(reply_err)) {
DEBUG_ERR(err, "failed to send kill_reply");
}
}
-static void exit_request_handler(struct spawn_binding *b,
- struct capref procmng_cap,
- struct capref domain_cap)
-{
- errval_t err = kill_handler_common(procmng_cap, domain_cap);
- errval_t reply_err = b->tx_vtbl.exit_reply(b, NOP_CONT, domain_cap, err);
- if (err_is_fail(reply_err)) {
- DEBUG_ERR(err, "failed to send exit_reply");
- }
-}
-
static void cleanup_request_handler(struct spawn_binding *b,
struct capref procmng_cap,
struct capref domain_cap)
free(pe);
reply:
- reply_err = b->tx_vtbl.cleanup_reply(b, NOP_CONT, domain_cap, err);
+ reply_err = b->tx_vtbl.spawn_reply(b, NOP_CONT, err);
if (err_is_fail(reply_err)) {
DEBUG_ERR(err, "failed to send cleanup_reply");
}
.spawn_with_caps_request = spawn_with_caps_request_handler,
.span_request = span_request_handler,
.kill_request = kill_request_handler,
- .exit_request = exit_request_handler,
.cleanup_request = cleanup_request_handler,
.use_local_memserv_call = use_local_memserv_handler,