From f3fc64dec0f1815d586f3ed3a477a7909070d95a Mon Sep 17 00:00:00 2001 From: Alexander K Date: Sat, 12 Sep 2015 22:06:26 +0300 Subject: [PATCH] #228: TODO for #116 and #254; several cleanups --- tempesta_db/core/main.c | 2 +- tempesta_fw/cfg.c | 4 +--- tempesta_fw/server.c | 17 ++++------------- tempesta_fw/server.h | 2 +- tempesta_fw/sock_clnt.c | 8 ++++++++ tempesta_fw/sock_srv.c | 30 ++++++++++++------------------ 6 files changed, 27 insertions(+), 36 deletions(-) diff --git a/tempesta_db/core/main.c b/tempesta_db/core/main.c index 5b7b5e94a..031be56d9 100644 --- a/tempesta_db/core/main.c +++ b/tempesta_db/core/main.c @@ -230,7 +230,7 @@ __do_close_table(TDB *db) tdb_htrie_exit(db->hdr); - TDB_LOG("Close table %s\n", db->tbl_name); + TDB_LOG("Close table '%s'\n", db->tbl_name); kfree(db); } diff --git a/tempesta_fw/cfg.c b/tempesta_fw/cfg.c index 0d8aa8356..2b83134b7 100644 --- a/tempesta_fw/cfg.c +++ b/tempesta_fw/cfg.c @@ -1500,8 +1500,6 @@ tfw_cfg_stop_mods(struct list_head *mod_list) { TfwCfgMod *mod; - TFW_DBG("stopping modules...\n"); - MOD_FOR_EACH_REVERSE(mod, mod_list) { mod_stop(mod); spec_cleanup(mod->specs); @@ -1719,7 +1717,7 @@ tfw_cfg_if_exit(void) { TfwCfgMod *mod, *tmp; - TFW_DBG("stopping and unregistering all cfg modules\n"); + TFW_DBG("stopping and unregistering all cfg modules...\n"); if (tfw_cfg_mods_are_started) tfw_cfg_stop_mods(&tfw_cfg_mods); diff --git a/tempesta_fw/server.c b/tempesta_fw/server.c index baecc14aa..f748f828f 100644 --- a/tempesta_fw/server.c +++ b/tempesta_fw/server.c @@ -192,10 +192,9 @@ DEBUG_EXPORT_SYMBOL(tfw_sg_set_sched); * @cb is called under spin-lock, so can't sleep. * @cb is considered as updater, so write lock is used. */ -int -tfw_sg_for_each_srv(int (*cb)(TfwServer *srv)) +void +tfw_sg_for_each_srv(void (*cb)(TfwServer *srv)) { - int r = 0; TfwServer *srv; TfwSrvGroup *sg; @@ -204,21 +203,13 @@ tfw_sg_for_each_srv(int (*cb)(TfwServer *srv)) list_for_each_entry(sg, &sg_list, list) { write_lock(&sg->lock); - list_for_each_entry(srv, &sg->srv_list, list) { - r = cb(srv); - if (r) { - write_unlock(&sg->lock); - goto out; - } - } + list_for_each_entry(srv, &sg->srv_list, list) + cb(srv); write_unlock(&sg->lock); } -out: write_unlock(&sg_lock); - - return r; } /** diff --git a/tempesta_fw/server.h b/tempesta_fw/server.h index b874789ba..7297e8b61 100644 --- a/tempesta_fw/server.h +++ b/tempesta_fw/server.h @@ -98,7 +98,7 @@ void tfw_sg_add(TfwSrvGroup *sg, TfwServer *srv); void tfw_sg_del(TfwSrvGroup *sg, TfwServer *srv); void tfw_sg_update(TfwSrvGroup *sg); int tfw_sg_set_sched(TfwSrvGroup *sg, const char *sched); -int tfw_sg_for_each_srv(int (*cb)(TfwServer *srv)); +void tfw_sg_for_each_srv(void (*cb)(TfwServer *srv)); void tfw_sg_release_all(void); #endif /* __SERVER_H__ */ diff --git a/tempesta_fw/sock_clnt.c b/tempesta_fw/sock_clnt.c index 692dad514..4f9694160 100644 --- a/tempesta_fw/sock_clnt.c +++ b/tempesta_fw/sock_clnt.c @@ -331,6 +331,14 @@ tfw_listen_sock_stop_all(void) ss_release(ls->sk); ls->sk = NULL; } + + /* + * TODO #116, #254 + * Now all listening sockets are closed, so no new connection can + * appear. Close all established client connections. After that we + * can safely close server connections since there are no their users + * any more. + */ } /* diff --git a/tempesta_fw/sock_srv.c b/tempesta_fw/sock_srv.c index 9197d997d..25a8fc3bc 100644 --- a/tempesta_fw/sock_srv.c +++ b/tempesta_fw/sock_srv.c @@ -352,7 +352,7 @@ tfw_sock_srv_disconnect(TfwSrvConnection *srv_conn) * not-yet-established connections in the TfwServer->conn_list. */ -static int +static void tfw_sock_srv_connect_srv(TfwServer *srv) { TfwSrvConnection *srv_conn; @@ -361,35 +361,32 @@ tfw_sock_srv_connect_srv(TfwServer *srv) if (tfw_sock_srv_connect_try(srv_conn)) __mod_retry_timer(srv_conn); } - - return 0; } -static int +/** + * There should be no server socket users when the function is called. + */ +static void tfw_sock_srv_disconnect_srv(TfwServer *srv) { TfwSrvConnection *srv_conn; - list_for_each_entry(srv_conn, &srv->conn_list, conn.list) { - local_bh_disable(); + list_for_each_entry(srv_conn, &srv->conn_list, conn.list) tfw_sock_srv_disconnect(srv_conn); - local_bh_enable(); - } - - return 0; } static int tfw_sock_srv_connect_all(void) { - return tfw_sg_for_each_srv(tfw_sock_srv_connect_srv); + tfw_sg_for_each_srv(tfw_sock_srv_connect_srv); + + return 0; } static void tfw_sock_srv_disconnect_all(void) { - int r = tfw_sg_for_each_srv(tfw_sock_srv_disconnect_srv); - BUG_ON(r); + tfw_sg_for_each_srv(tfw_sock_srv_disconnect_srv); } /* @@ -457,7 +454,7 @@ tfw_sock_srv_add_conns(TfwServer *srv, int conns_n) return 0; } -static int +static void tfw_sock_srv_delete_conns(TfwServer *srv) { TfwSrvConnection *srv_conn, *tmp; @@ -466,15 +463,12 @@ tfw_sock_srv_delete_conns(TfwServer *srv) tfw_connection_unlink_peer(&srv_conn->conn); tfw_srv_conn_free(srv_conn); } - - return 0; } static void tfw_sock_srv_delete_all_conns(void) { - int r = tfw_sg_for_each_srv(tfw_sock_srv_delete_conns); - BUG_ON(r); + tfw_sg_for_each_srv(tfw_sock_srv_delete_conns); } /*