better hop selection fault tolerance

pull/7/head
Jeff Becker 6 years ago
parent 7cec96901d
commit 536f63ed2a

@ -33,7 +33,7 @@ struct llarp_pathbuild_job;
typedef void (*llarp_pathbuilder_hook)(struct llarp_pathbuild_job*);
// select hop function (user, nodedb, prevhop, result, hopnnumber) called in
// logic thread
typedef void (*llarp_pathbuilder_select_hop_func)(void*, struct llarp_nodedb*,
typedef bool (*llarp_pathbuilder_select_hop_func)(void*, struct llarp_nodedb*,
struct llarp_rc*,
struct llarp_rc*, size_t);

@ -98,12 +98,12 @@ namespace llarp
SelectHop(llarp_nodedb* db, llarp_rc* prev, llarp_rc* cur,
size_t hop) = 0;
static void
static bool
SelectHopCallback(void* user, llarp_nodedb* db, llarp_rc* prev,
llarp_rc* cur, size_t hopno)
{
PathSet* self = static_cast< PathSet* >(user);
self->SelectHop(db, prev, cur, hopno);
return self->SelectHop(db, prev, cur, hopno);
}
private:

@ -156,7 +156,12 @@ namespace llarp
{
llarp_rc* rc = &job->hops.hops[idx].router;
llarp_rc_clear(rc);
job->selectHop(job->user, job->router->nodedb, prev, rc, idx);
if(!job->selectHop(job->user, job->router->nodedb, prev, rc, idx))
{
/// TODO: handle this failure properly
llarp::LogWarn("Failed to select hop ", idx);
return;
}
prev = rc;
++idx;
}

Loading…
Cancel
Save