diff options
author | David Härdeman <david@hardeman.nu> | 2020-06-10 21:20:46 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-06-10 21:20:46 +0200 |
commit | 097a84d8d1a041a66c9b0b51c7f89e70dec13b0a (patch) | |
tree | 211f4ea301e68b67012035e2a75744ae50ec0d08 /server.c | |
parent | 11e6254179cb78412f40d2a263bf4fb40dd7f2ff (diff) |
Implement proper proxy shutdown
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -79,6 +79,7 @@ void server_delete(struct cfg *cfg, struct server *scfg) { struct server_local *local, *ltmp; + struct server_proxy *proxy, *ptmp; struct sockaddr_in46 *remote, *rtmp; struct sockaddr_in46 *rcon, *rctmp; @@ -87,18 +88,20 @@ server_delete(struct cfg *cfg, struct server *scfg) idle_delete(cfg, scfg); rcon_delete(cfg, scfg); - list_for_each_entry_safe(remote, rtmp, &scfg->remotes, list) { - list_del(&remote->list); - xfree(remote); - } + list_for_each_entry_safe(local, ltmp, &scfg->locals, list) + uring_cancel(cfg, &local->task); + + list_for_each_entry_safe(proxy, ptmp, &scfg->proxys, list) + proxy_delete(cfg, proxy); list_for_each_entry_safe(rcon, rctmp, &scfg->rcons, list) { list_del(&rcon->list); xfree(rcon); } - list_for_each_entry_safe(local, ltmp, &scfg->locals, list) { - uring_cancel(cfg, &local->task); + list_for_each_entry_safe(remote, rtmp, &scfg->remotes, list) { + list_del(&remote->list); + xfree(remote); } uring_poll_cancel(cfg, &scfg->exec_task); |