mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-23 06:42:09 +03:00
khan: send errors over socket
Also: - More precise TODOs. - Send %cue-none rather than %'bad jar' on cue failure.
This commit is contained in:
parent
2d03b40b4c
commit
65c25995ad
@ -1,3 +1,10 @@
|
|||||||
|
// TODO
|
||||||
|
// - remove sequence numbers or add them all the way
|
||||||
|
// - think carefully about error handling
|
||||||
|
// - think carefully about protocol
|
||||||
|
// - implement runtime-specific queries
|
||||||
|
// - remove references to %set-config
|
||||||
|
// - clean up logging
|
||||||
/* vere/khan.c
|
/* vere/khan.c
|
||||||
**
|
**
|
||||||
*/
|
*/
|
||||||
@ -60,14 +67,7 @@ _khan_moor_bail(void* ptr_v, ssize_t err_i, const c3_c* err_c)
|
|||||||
u3_khan* kan_u = san_u->kan_u;
|
u3_khan* kan_u = san_u->kan_u;
|
||||||
u3_chan* inn_u;
|
u3_chan* inn_u;
|
||||||
|
|
||||||
if ( err_i != UV_EOF ) {
|
if ( err_i == UV_EOF ) {
|
||||||
u3l_log("khan: bail called %p %zd %s\n", ptr_v, err_i, err_c);
|
|
||||||
u3_king_bail();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// TODO remove
|
|
||||||
u3l_log("khan: eof\n");
|
|
||||||
|
|
||||||
// close socket and remove reference.
|
// close socket and remove reference.
|
||||||
for ( inn_u = san_u->can_u; inn_u; inn_u = (u3_chan*)inn_u->mor_u.nex_u ) {
|
for ( inn_u = san_u->can_u; inn_u; inn_u = (u3_chan*)inn_u->mor_u.nex_u ) {
|
||||||
if ( (u3_chan*)inn_u->mor_u.nex_u == can_u ) {
|
if ( (u3_chan*)inn_u->mor_u.nex_u == can_u ) {
|
||||||
@ -78,6 +78,20 @@ _khan_moor_bail(void* ptr_v, ssize_t err_i, const c3_c* err_c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// TODO retry up to N
|
||||||
|
u3_noun bal;
|
||||||
|
c3_y* byt_y;
|
||||||
|
c3_d len_d;
|
||||||
|
|
||||||
|
bal = u3nq(c3__bail,
|
||||||
|
u3i_string("driver"),
|
||||||
|
-err_i & 0x7fffffff,
|
||||||
|
u3i_string(err_c));
|
||||||
|
u3s_jam_xeno(bal, &len_d, &byt_y);
|
||||||
|
u3_newt_send((u3_mojo*)&can_u->mor_u, len_d, byt_y);
|
||||||
|
u3z(bal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -91,7 +105,7 @@ _khan_moor_poke(void* ptr_v, c3_d len_d, c3_y* byt_y)
|
|||||||
|
|
||||||
jar = u3s_cue_xeno_with(kan_u->sil_u, len_d, byt_y);
|
jar = u3s_cue_xeno_with(kan_u->sil_u, len_d, byt_y);
|
||||||
if ( u3_none == jar ) {
|
if ( u3_none == jar ) {
|
||||||
_khan_moor_bail(ptr_v, -1, "bad jar");
|
_khan_moor_bail(ptr_v, -1, "cue-none");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wir = u3nc(u3i_string("khan"),
|
wir = u3nc(u3i_string("khan"),
|
||||||
@ -262,9 +276,7 @@ _khan_ef_handle(u3_khan* kan_u,
|
|||||||
{
|
{
|
||||||
u3_chan* can_u;
|
u3_chan* can_u;
|
||||||
|
|
||||||
// for avow: send back over pipe as jammed noun
|
// TODO: socket events (close connection; any others?)
|
||||||
// for crud: send error message over pipe?
|
|
||||||
// for socket event: perform activity
|
|
||||||
|
|
||||||
if ( sev_l != kan_u->sev_l ) {
|
if ( sev_l != kan_u->sev_l ) {
|
||||||
u3l_log("khan: server instance not found: %x\n", sev_l);
|
u3l_log("khan: server instance not found: %x\n", sev_l);
|
||||||
|
Loading…
Reference in New Issue
Block a user