Skip to content

Commit

Permalink
Avoid machinarium call with router lock (#606)
Browse files Browse the repository at this point in the history
* Avoid machinarium call with router lock

* oversight

* format

---------

Co-authored-by: Andrey M. Borodin <[email protected]>
  • Loading branch information
x4m and Andrey M. Borodin authored Apr 10, 2024
1 parent c827bb4 commit 738fd08
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions sources/router.c
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,19 @@ od_router_status_t od_router_route(od_router_t *router, od_client_t *client)
kiwi_be_startup_t *startup = &client->startup;
od_instance_t *instance = router->global->instance;

struct sockaddr_storage sa;
int salen;
struct sockaddr *saddr;
int rc;
salen = sizeof(sa);
saddr = (struct sockaddr *)&sa;
if (client->type == OD_POOL_CLIENT_EXTERNAL) {
rc = machine_getpeername(client->io.io, saddr, &salen);
if (rc == -1) {
return OD_ROUTER_ERROR;
}
}

/* match route */
assert(startup->database.value_len);
assert(startup->user.value_len);
Expand All @@ -354,10 +367,6 @@ od_router_status_t od_router_route(od_router_t *router, od_client_t *client)
od_rule_t *rule =
NULL; // initialize rule for (line 365) and flag '-Wmaybe-uninitialized'

struct sockaddr_storage sa;
int salen;
struct sockaddr *saddr;
int rc;
int sequential = instance->config.sequential_routing;
switch (client->type) {
case OD_POOL_CLIENT_INTERNAL:
Expand All @@ -366,13 +375,6 @@ od_router_status_t od_router_route(od_router_t *router, od_client_t *client)
sequential);
break;
case OD_POOL_CLIENT_EXTERNAL:
salen = sizeof(sa);
saddr = (struct sockaddr *)&sa;
rc = machine_getpeername(client->io.io, saddr, &salen);
if (rc == -1) {
od_router_unlock(router);
return OD_ROUTER_ERROR;
}
rule = od_rules_forward(&router->rules, startup->database.value,
startup->user.value, &sa, 0,
sequential);
Expand Down

0 comments on commit 738fd08

Please sign in to comment.