vere: give up ames scry after successive failures

Instead of giving up on scrying at the first sight of a u3_none result,
keep trying for a little bit. If five scries fail in direct succession,
consider scrying not worth the effort, and stop trying as before.
This commit is contained in:
Fang 2020-08-28 15:34:19 +02:00
parent d76a5e9077
commit 024c16cd97
No known key found for this signature in database
GPG Key ID: EB035760C1BBA972

View File

@ -42,6 +42,7 @@
time_t imp_t[256]; // imperial IP timestamps time_t imp_t[256]; // imperial IP timestamps
c3_o imp_o[256]; // imperial print status c3_o imp_o[256]; // imperial print status
c3_o see_o; // can scry c3_o see_o; // can scry
c3_d saw_d; // successive scry failures
c3_o fit_o; // filtering active c3_o fit_o; // filtering active
c3_y ver_y; // protocol version c3_y ver_y; // protocol version
c3_d vet_d; // version mismatches filtered c3_d vet_d; // version mismatches filtered
@ -655,24 +656,31 @@ _ames_lane_scry_cb(void* vod_p, u3_noun nun)
// if scry fails, remember we can't scry, and just inject the packet // if scry fails, remember we can't scry, and just inject the packet
// //
if (u3_none == las) { if (u3_none == las) {
u3l_log("ames: giving up scry\n"); if (5 < ++pac_u->sam_u->saw_d) {
pac_u->sam_u->see_o = c3n; u3l_log("ames: giving up scry\n");
pac_u->sam_u->see_o = c3n;
}
_ames_put_packet(pac_u->sam_u, _ames_put_packet(pac_u->sam_u,
_ames_serialize_packet(pac_u, c3n), _ames_serialize_packet(pac_u, c3n),
pac_u->ore_u); pac_u->ore_u);
pac_u->sam_u->foq_d--; pac_u->sam_u->foq_d--;
_ames_panc_free(pac_u); _ames_panc_free(pac_u);
} }
// if there is no lane, drop the packet
//
else if (u3_nul == las) {
pac_u->sam_u->foq_d--;
_ames_panc_free(pac_u);
}
// if there is a lane, forward the packet on it
//
else { else {
_ames_forward(pac_u, u3k(las)); if (0 < pac_u->sam_u->saw_d) {
pac_u->sam_u->saw_d--;
}
// if there is no lane, drop the packet
//
if (u3_nul == las) {
pac_u->sam_u->foq_d--;
_ames_panc_free(pac_u);
}
// if there is a lane, forward the packet on it
//
else {
_ames_forward(pac_u, u3k(las));
}
} }
u3z(nun); u3z(nun);