--- lbbs/src/main.c 2004/10/22 15:20:32 1.7 +++ lbbs/src/main.c 2025/11/18 10:41:14 1.80 @@ -1,138 +1,431 @@ -/*************************************************************************** - main.c - description - ------------------- - begin : Mon Oct 11 2004 - copyright : (C) 2004 by Leaflet - email : leaflet@leafok.com - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ +/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* + * main + * - entry of server program + * + * Copyright (C) 2004-2025 Leaflet + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include "bbs.h" +#include "bwf.h" #include "common.h" +#include "file_loader.h" +#include "init.h" #include "io.h" +#include "log.h" +#include "menu.h" +#include "net_server.h" +#include "section_list_loader.h" +#include "user_list.h" +#include +#include +#include +#include +#include +#include #include +#include +#include +#include +#include -void -app_help(void) +static void app_help(void) { - prints ( - "Usage: bbsd [-fhv] [...]\n\n" - "-f\t--foreground\t\tForce program run in foreground\n" - "-h\t--help\t\t\tDisplay this help message\n" - "-v\t--version\t\tDisplay version information\n" - "\t--display-log\t\tDisplay standard log information\n" - "\t--display-error-log\tDisplay error log information\n" - "\n If meet any bug, please report to \n\n" - ); + fprintf(stderr, "Usage: bbsd [-fhv] [...]\n\n" + "-f\t--foreground\t\tForce program run in foreground\n" + "-h\t--help\t\t\tDisplay this help message\n" + "-v\t--version\t\tDisplay version information\n" + "\t--display-log\t\tDisplay standard log information\n" + "\t--display-error-log\tDisplay error log information\n" + "\n If meet any bug, please report to \n\n"); } -void -arg_error(void) +static void arg_error(void) { - prints ("Invalid arguments\n"); - app_help(); + fprintf(stderr, "Invalid arguments\n"); + app_help(); } -int -main (int argc, char *argv[]) +int main(int argc, char *argv[]) { - char log_dir[256], file_log_std[256], file_log_error[256], file_config[256]; - int i,j; - int daemon = 1, std_log_redir = 0, error_log_redir = 0; - - //Parse args - for (i=1; i 0) + { + SYS_child_exit = 0; + + if (kill(section_list_loader_pid, SIGTERM) < 0) + { + log_error("Send SIGTERM signal failed (%d)\n", errno); + } + + for(i = 0; SYS_child_exit == 0 && i < 5; i++) + { + sleep(1); // second + } + + if ((ret = waitpid(section_list_loader_pid, NULL, WNOHANG)) < 0) + { + log_error("waitpid(%d) error (%d)\n", section_list_loader_pid, errno); + } + else if (ret == 0) + { + log_common("Force kill section_list_loader process (%d)\n", section_list_loader_pid); + if (kill(section_list_loader_pid, SIGKILL) < 0) + { + log_error("Send SIGKILL signal failed (%d)\n", errno); + } + } + } + + // Cleanup loaded data files + file_loader_cleanup(); + + // Cleanup menu + unload_menu(&bbs_menu); + unload_menu(&top10_menu); + + // Cleanup data pools + section_list_cleanup(); + article_block_cleanup(); + trie_dict_cleanup(); + user_list_pool_cleanup(); + + // Cleanup BWF + bwf_unload(); + + if (unlink(VAR_ARTICLE_BLOCK_SHM) < 0) + { + log_error("unlink(%s) error\n", VAR_ARTICLE_BLOCK_SHM); + } + if (unlink(VAR_SECTION_LIST_SHM) < 0) + { + log_error("unlink(%s) error\n", VAR_SECTION_LIST_SHM); + } + if (unlink(VAR_TRIE_DICT_SHM) < 0) + { + log_error("unlink(%s) error\n", VAR_TRIE_DICT_SHM); + } + if (unlink(VAR_USER_LIST_SHM) < 0) + { + log_error("unlink(%s) error\n", VAR_SECTION_LIST_SHM); + } + + log_common("Main process exit normally\n"); - //Initialize socket server - net_server(BBS_address, BBS_port); + log_end(); - return 0; + return 0; }