/[LeafOK_CVS]/lbbs/src/main.c
ViewVC logotype

Diff of /lbbs/src/main.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.89 by sysadm, Tue Dec 16 13:00:19 2025 UTC Revision 1.90 by sysadm, Fri Dec 19 06:16:27 2025 UTC
# Line 218  int main(int argc, char *argv[]) Line 218  int main(int argc, char *argv[])
218                  log_error_redir(STDERR_FILENO);                  log_error_redir(STDERR_FILENO);
219          }          }
220    
221          log_common("Starting %s\n", APP_INFO);          log_common("Starting %s", APP_INFO);
222    
223          // Load configuration          // Load configuration
224          if (load_conf(CONF_BBSD) < 0)          if (load_conf(CONF_BBSD) < 0)
# Line 235  int main(int argc, char *argv[]) Line 235  int main(int argc, char *argv[])
235          // Get EULA modification tm          // Get EULA modification tm
236          if (stat(DATA_EULA, &file_stat) == -1)          if (stat(DATA_EULA, &file_stat) == -1)
237          {          {
238                  log_error("stat(%s) error\n", DATA_EULA, errno);                  log_error("stat(%s) error", DATA_EULA, errno);
239                  goto cleanup;                  goto cleanup;
240          }          }
241          BBS_eula_tm = file_stat.st_mtim.tv_sec;          BBS_eula_tm = file_stat.st_mtim.tv_sec;
# Line 244  int main(int argc, char *argv[]) Line 244  int main(int argc, char *argv[])
244          ret = mkdir(VAR_ARTICLE_CACHE_DIR, 0750);          ret = mkdir(VAR_ARTICLE_CACHE_DIR, 0750);
245          if (ret == -1 && errno != EEXIST)          if (ret == -1 && errno != EEXIST)
246          {          {
247                  log_error("mkdir(%s) error (%d)\n", VAR_ARTICLE_CACHE_DIR, errno);                  log_error("mkdir(%s) error (%d)", VAR_ARTICLE_CACHE_DIR, errno);
248                  goto cleanup;                  goto cleanup;
249          }          }
250    
# Line 252  int main(int argc, char *argv[]) Line 252  int main(int argc, char *argv[])
252          ret = mkdir(VAR_SECTION_AID_LOC_DIR, 0750);          ret = mkdir(VAR_SECTION_AID_LOC_DIR, 0750);
253          if (ret == -1 && errno != EEXIST)          if (ret == -1 && errno != EEXIST)
254          {          {
255                  log_error("mkdir(%s) error (%d)\n", VAR_SECTION_AID_LOC_DIR, errno);                  log_error("mkdir(%s) error (%d)", VAR_SECTION_AID_LOC_DIR, errno);
256                  goto cleanup;                  goto cleanup;
257          }          }
258    
259          // Initialize data pools          // Initialize data pools
260          if ((fp = fopen(VAR_ARTICLE_BLOCK_SHM, "w")) == NULL)          if ((fp = fopen(VAR_ARTICLE_BLOCK_SHM, "w")) == NULL)
261          {          {
262                  log_error("fopen(%s) error\n", VAR_ARTICLE_BLOCK_SHM);                  log_error("fopen(%s) error", VAR_ARTICLE_BLOCK_SHM);
263                  goto cleanup;                  goto cleanup;
264          }          }
265          fclose(fp);          fclose(fp);
266          if ((fp = fopen(VAR_SECTION_LIST_SHM, "w")) == NULL)          if ((fp = fopen(VAR_SECTION_LIST_SHM, "w")) == NULL)
267          {          {
268                  log_error("fopen(%s) error\n", VAR_SECTION_LIST_SHM);                  log_error("fopen(%s) error", VAR_SECTION_LIST_SHM);
269                  goto cleanup;                  goto cleanup;
270          }          }
271          fclose(fp);          fclose(fp);
272          if ((fp = fopen(VAR_TRIE_DICT_SHM, "w")) == NULL)          if ((fp = fopen(VAR_TRIE_DICT_SHM, "w")) == NULL)
273          {          {
274                  log_error("fopen(%s) error\n", VAR_TRIE_DICT_SHM);                  log_error("fopen(%s) error", VAR_TRIE_DICT_SHM);
275                  goto cleanup;                  goto cleanup;
276          }          }
277          fclose(fp);          fclose(fp);
278          if ((fp = fopen(VAR_USER_LIST_SHM, "w")) == NULL)          if ((fp = fopen(VAR_USER_LIST_SHM, "w")) == NULL)
279          {          {
280                  log_error("fopen(%s) error\n", VAR_USER_LIST_SHM);                  log_error("fopen(%s) error", VAR_USER_LIST_SHM);
281                  goto cleanup;                  goto cleanup;
282          }          }
283          fclose(fp);          fclose(fp);
284    
285          if (trie_dict_init(VAR_TRIE_DICT_SHM, TRIE_NODE_PER_POOL) < 0)          if (trie_dict_init(VAR_TRIE_DICT_SHM, TRIE_NODE_PER_POOL) < 0)
286          {          {
287                  log_error("trie_dict_init(%s, %d) error\n", VAR_TRIE_DICT_SHM, TRIE_NODE_PER_POOL);                  log_error("trie_dict_init(%s, %d) error", VAR_TRIE_DICT_SHM, TRIE_NODE_PER_POOL);
288                  goto cleanup;                  goto cleanup;
289          }          }
290          if (article_block_init(VAR_ARTICLE_BLOCK_SHM, BBS_article_limit_per_section * BBS_max_section / BBS_article_count_per_block) < 0)          if (article_block_init(VAR_ARTICLE_BLOCK_SHM, BBS_article_limit_per_section * BBS_max_section / BBS_article_count_per_block) < 0)
291          {          {
292                  log_error("article_block_init(%s, %d) error\n", VAR_ARTICLE_BLOCK_SHM, BBS_article_limit_per_section * BBS_max_section / BBS_article_count_per_block);                  log_error("article_block_init(%s, %d) error", VAR_ARTICLE_BLOCK_SHM, BBS_article_limit_per_section * BBS_max_section / BBS_article_count_per_block);
293                  goto cleanup;                  goto cleanup;
294          }          }
295          if (section_list_init(VAR_SECTION_LIST_SHM) < 0)          if (section_list_init(VAR_SECTION_LIST_SHM) < 0)
296          {          {
297                  log_error("section_list_pool_init(%s) error\n", VAR_SECTION_LIST_SHM);                  log_error("section_list_pool_init(%s) error", VAR_SECTION_LIST_SHM);
298                  goto cleanup;                  goto cleanup;
299          }          }
300    
# Line 307  int main(int argc, char *argv[]) Line 307  int main(int argc, char *argv[])
307          // Load menus          // Load menus
308          if (load_menu(&bbs_menu, CONF_MENU) < 0)          if (load_menu(&bbs_menu, CONF_MENU) < 0)
309          {          {
310                  log_error("load_menu(bbs_menu) error\n");                  log_error("load_menu(bbs_menu) error");
311                  goto cleanup;                  goto cleanup;
312          }          }
313          if (load_menu(&top10_menu, CONF_TOP10_MENU) < 0)          if (load_menu(&top10_menu, CONF_TOP10_MENU) < 0)
314          {          {
315                  log_error("load_menu(top10_menu) error\n");                  log_error("load_menu(top10_menu) error");
316                  goto cleanup;                  goto cleanup;
317          }          }
318          top10_menu.allow_exit = 1;          top10_menu.allow_exit = 1;
# Line 322  int main(int argc, char *argv[]) Line 322  int main(int argc, char *argv[])
322          {          {
323                  if (load_file(data_files_load_startup[i]) < 0)                  if (load_file(data_files_load_startup[i]) < 0)
324                  {                  {
325                          log_error("load_file(%s) error\n", data_files_load_startup[i]);                          log_error("load_file(%s) error", data_files_load_startup[i]);
326                  }                  }
327          }          }
328    
329          // Load user_list and online_user_list          // Load user_list and online_user_list
330          if (user_list_pool_init(VAR_USER_LIST_SHM) < 0)          if (user_list_pool_init(VAR_USER_LIST_SHM) < 0)
331          {          {
332                  log_error("user_list_pool_init(%s) error\n", VAR_USER_LIST_SHM);                  log_error("user_list_pool_init(%s) error", VAR_USER_LIST_SHM);
333                  goto cleanup;                  goto cleanup;
334          }          }
335          if (user_list_pool_reload(0) < 0)          if (user_list_pool_reload(0) < 0)
336          {          {
337                  log_error("user_list_pool_reload(all_user) error\n");                  log_error("user_list_pool_reload(all_user) error");
338                  goto cleanup;                  goto cleanup;
339          }          }
340          if (user_list_pool_reload(1) < 0)          if (user_list_pool_reload(1) < 0)
341          {          {
342                  log_error("user_list_pool_reload(online_user) error\n");                  log_error("user_list_pool_reload(online_user) error");
343                  goto cleanup;                  goto cleanup;
344          }          }
345    
346          // Load section config and gen_ex          // Load section config and gen_ex
347          if (load_section_config_from_db(1) < 0)          if (load_section_config_from_db(1) < 0)
348          {          {
349                  log_error("load_section_config_from_db(0) error\n");                  log_error("load_section_config_from_db(0) error");
350                  goto cleanup;                  goto cleanup;
351          }          }
352    
# Line 358  int main(int argc, char *argv[]) Line 358  int main(int argc, char *argv[])
358          {          {
359                  if ((ret = append_articles_from_db(last_aid + 1, 1, LOAD_ARTICLE_COUNT_LIMIT)) < 0)                  if ((ret = append_articles_from_db(last_aid + 1, 1, LOAD_ARTICLE_COUNT_LIMIT)) < 0)
360                  {                  {
361                          log_error("append_articles_from_db(0, 1, %d) error\n", LOAD_ARTICLE_COUNT_LIMIT);                          log_error("append_articles_from_db(0, 1, %d) error", LOAD_ARTICLE_COUNT_LIMIT);
362                          goto cleanup;                          goto cleanup;
363                  }                  }
364    
365                  last_aid = article_block_last_aid();                  last_aid = article_block_last_aid();
366          } while (ret == LOAD_ARTICLE_COUNT_LIMIT);          } while (ret == LOAD_ARTICLE_COUNT_LIMIT);
367    
368          log_common("Initially load %d articles, last_aid = %d\n", article_block_article_count(), article_block_last_aid());          log_common("Initially load %d articles, last_aid = %d", article_block_article_count(), article_block_last_aid());
369    
370          if ((ret = user_stat_update()) < 0)          if ((ret = user_stat_update()) < 0)
371          {          {
372                  log_error("user_stat_update() error\n");                  log_error("user_stat_update() error");
373                  goto cleanup;                  goto cleanup;
374          }          }
375    
# Line 377  int main(int argc, char *argv[]) Line 377  int main(int argc, char *argv[])
377          act.sa_handler = sig_hup_handler;          act.sa_handler = sig_hup_handler;
378          if (sigaction(SIGHUP, &act, NULL) == -1)          if (sigaction(SIGHUP, &act, NULL) == -1)
379          {          {
380                  log_error("set signal action of SIGHUP error: %d\n", errno);                  log_error("set signal action of SIGHUP error: %d", errno);
381                  goto cleanup;                  goto cleanup;
382          }          }
383          act.sa_handler = sig_chld_handler;          act.sa_handler = sig_chld_handler;
384          if (sigaction(SIGCHLD, &act, NULL) == -1)          if (sigaction(SIGCHLD, &act, NULL) == -1)
385          {          {
386                  log_error("set signal action of SIGCHLD error: %d\n", errno);                  log_error("set signal action of SIGCHLD error: %d", errno);
387                  goto cleanup;                  goto cleanup;
388          }          }
389          act.sa_handler = sig_term_handler;          act.sa_handler = sig_term_handler;
390          if (sigaction(SIGTERM, &act, NULL) == -1)          if (sigaction(SIGTERM, &act, NULL) == -1)
391          {          {
392                  log_error("set signal action of SIGTERM error: %d\n", errno);                  log_error("set signal action of SIGTERM error: %d", errno);
393                  goto cleanup;                  goto cleanup;
394          }          }
395          act.sa_handler = SIG_IGN;          act.sa_handler = SIG_IGN;
396          if (sigaction(SIGPIPE, &act, NULL) == -1)          if (sigaction(SIGPIPE, &act, NULL) == -1)
397          {          {
398                  log_error("set signal action of SIGPIPE error: %d\n", errno);                  log_error("set signal action of SIGPIPE error: %d", errno);
399                  goto cleanup;                  goto cleanup;
400          }          }
401          act.sa_handler = SIG_IGN;          act.sa_handler = SIG_IGN;
402          if (sigaction(SIGUSR1, &act, NULL) == -1)          if (sigaction(SIGUSR1, &act, NULL) == -1)
403          {          {
404                  log_error("set signal action of SIGUSR1 error: %d\n", errno);                  log_error("set signal action of SIGUSR1 error: %d", errno);
405                  goto cleanup;                  goto cleanup;
406          }          }
407    
408          // Launch section_list_loader process          // Launch section_list_loader process
409          if (section_list_loader_launch() < 0)          if (section_list_loader_launch() < 0)
410          {          {
411                  log_error("section_list_loader_launch() error\n");                  log_error("section_list_loader_launch() error");
412                  goto cleanup;                  goto cleanup;
413          }          }
414    
# Line 423  cleanup: Line 423  cleanup:
423    
424                  if (kill(section_list_loader_pid, SIGTERM) < 0)                  if (kill(section_list_loader_pid, SIGTERM) < 0)
425                  {                  {
426                          log_error("Send SIGTERM signal failed (%d)\n", errno);                          log_error("Send SIGTERM signal failed (%d)", errno);
427                  }                  }
428    
429                  for (i = 0; SYS_child_exit == 0 && i < 5; i++)                  for (i = 0; SYS_child_exit == 0 && i < 5; i++)
# Line 433  cleanup: Line 433  cleanup:
433    
434                  if ((ret = waitpid(section_list_loader_pid, NULL, WNOHANG)) < 0)                  if ((ret = waitpid(section_list_loader_pid, NULL, WNOHANG)) < 0)
435                  {                  {
436                          log_error("waitpid(%d) error (%d)\n", section_list_loader_pid, errno);                          log_error("waitpid(%d) error (%d)", section_list_loader_pid, errno);
437                  }                  }
438                  else if (ret == 0)                  else if (ret == 0)
439                  {                  {
440                          log_common("Force kill section_list_loader process (%d)\n", section_list_loader_pid);                          log_common("Force kill section_list_loader process (%d)", section_list_loader_pid);
441                          if (kill(section_list_loader_pid, SIGKILL) < 0)                          if (kill(section_list_loader_pid, SIGKILL) < 0)
442                          {                          {
443                                  log_error("Send SIGKILL signal failed (%d)\n", errno);                                  log_error("Send SIGKILL signal failed (%d)", errno);
444                          }                          }
445                  }                  }
446          }          }
# Line 450  cleanup: Line 450  cleanup:
450          {          {
451                  if (unload_file(data_files_load_startup[i]) < 0)                  if (unload_file(data_files_load_startup[i]) < 0)
452                  {                  {
453                          log_error("unload_file(%s) error\n", data_files_load_startup[i]);                          log_error("unload_file(%s) error", data_files_load_startup[i]);
454                  }                  }
455          }          }
456    
# Line 466  cleanup: Line 466  cleanup:
466    
467          if (unlink(VAR_ARTICLE_BLOCK_SHM) < 0)          if (unlink(VAR_ARTICLE_BLOCK_SHM) < 0)
468          {          {
469                  log_error("unlink(%s) error\n", VAR_ARTICLE_BLOCK_SHM);                  log_error("unlink(%s) error", VAR_ARTICLE_BLOCK_SHM);
470          }          }
471          if (unlink(VAR_SECTION_LIST_SHM) < 0)          if (unlink(VAR_SECTION_LIST_SHM) < 0)
472          {          {
473                  log_error("unlink(%s) error\n", VAR_SECTION_LIST_SHM);                  log_error("unlink(%s) error", VAR_SECTION_LIST_SHM);
474          }          }
475          if (unlink(VAR_TRIE_DICT_SHM) < 0)          if (unlink(VAR_TRIE_DICT_SHM) < 0)
476          {          {
477                  log_error("unlink(%s) error\n", VAR_TRIE_DICT_SHM);                  log_error("unlink(%s) error", VAR_TRIE_DICT_SHM);
478          }          }
479          if (unlink(VAR_USER_LIST_SHM) < 0)          if (unlink(VAR_USER_LIST_SHM) < 0)
480          {          {
481                  log_error("unlink(%s) error\n", VAR_SECTION_LIST_SHM);                  log_error("unlink(%s) error", VAR_SECTION_LIST_SHM);
482          }          }
483    
484          log_common("Main process exit normally\n");          log_common("Main process exit normally");
485    
486          log_end();          log_end();
487    


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1