--- nono/lib/mainapp.cpp 2026/04/29 17:05:30 1.1.1.18 +++ nono/lib/mainapp.cpp 2026/04/29 17:05:34 1.1.1.19 @@ -330,13 +330,14 @@ MainApp::Init1a(int ac, char *av[]) PANIC("vmtype=%s not configured", vmstr.c_str()); } - // 2. 動的なコンストラクション - if (!pVM->Create()) { + // 2. 動的なコンストラクションその1 + // 3. ログ出力用の EarlyInit + if (!pVM->Create(VM::CreationPhase::First)) { pVM.reset(); return EXIT_FAILURE; } - // 3. 設定を確定。 + // 4. 設定を確定。 // (VM コンストラクタで変数の増減があるのでそれより後、 // Create() でも SCSI パラメータを減らすので、それより後) if (gConfig->Fix() == false) { @@ -357,21 +358,21 @@ MainApp::Init1a(int ac, char *av[]) int MainApp::Init1b() { - // 3.1 設定が確定したので --show-config なら設定内容を表示して終了。 + // 4.1 設定が確定したので --show-config なら設定内容を表示して終了。 if (show_config) { gConfig->Show(show_config - 1); pVM.reset(); return EXIT_SUCCESS; } - // 3.2 ログレベルを設定。コンストラクト後すぐに行う。 + // 4.2 ログレベルを設定。コンストラクト後すぐに行う。 // -L help もここで処理。 if (!ParseLogopt()) { pVM.reset(); return EXIT_FAILURE; } - // 3.3 -X のチェック。 + // 4.3 -X のチェック。 // -L help より後にしないとヘルプが表示できない。 const ConfigItem& itemexec = gConfig->Find("exec-file"); if (exec_file == NULL) { @@ -406,6 +407,13 @@ MainApp::Init1b() } } + // 5. 動的コンストラクションその2 + // ログ出力が出来る代わりにログクラスはもう増やせない。 + if (!pVM->Create(VM::CreationPhase::Second)) { + pVM.reset(); + return EXIT_FAILURE; + } + return PASS; } @@ -416,7 +424,7 @@ MainApp::Init1b() bool MainApp::Init2() { - // 5. VM 初期化。 + // 7. VM 初期化。 if (!pVM->Init()) { return false; } @@ -424,12 +432,12 @@ MainApp::Init2() // メインスレッド名を設定 PTHREAD_SETNAME("Main"); - // 6. スレッド開始 + // 8. スレッド開始 if (!pVM->StartThread()) { return false; } - // 7. 起動時設定の適用 + // 9. 起動時設定の適用 if (!pVM->Apply()) { return false; }