As the Route object may be managed by Manager.
if (k < 0)
r = k;
- route_cancel_request(route);
+ route_cancel_request(route, link);
}
} else {
Address *address;
if (k < 0)
r = k;
- route_cancel_request(route);
+ route_cancel_request(route, link);
}
SET_FOREACH(address, link->addresses) {
if (k < 0)
r = k;
- route_cancel_request(route);
+ route_cancel_request(route, link);
}
SET_FOREACH(address, link->addresses) {
if (k < 0)
r = k;
- route_cancel_request(route);
+ route_cancel_request(route, link);
}
SET_FOREACH(address, link->addresses) {
return 0;
}
-void route_cancel_request(Route *route) {
+void route_cancel_request(Route *route, Link *link) {
Request req;
assert(route);
- if (!route_is_requesting(route))
- return;
+ link = route->link ?: link;
- if (!route->link)
+ assert(link);
+
+ if (!route_is_requesting(route))
return;
req = (Request) {
- .link = route->link,
+ .link = link,
.type = REQUEST_TYPE_ROUTE,
.route = route,
};
- request_drop(ordered_set_get(route->link->manager->request_queue, &req));
+ request_drop(ordered_set_get(link->manager->request_queue, &req));
route_cancel_requesting(route);
}
int link_drop_foreign_routes(Link *link);
void link_foreignize_routes(Link *link);
-void route_cancel_request(Route *route);
+void route_cancel_request(Route *route, Link *link);
int link_request_route(
Link *link,
Route *route,