[1.12] Some "locking problem with AppVerifier" #15378

Closed
opened 2026-01-31 04:36:51 +00:00 by claunia · 6 comments
Owner

Originally created by @zadjii-msft on GitHub (Sep 28, 2021).

discovered in the 1.12 bug bash on 9/28

miniksa found this, but didn't investigate. Someone should.

Originally created by @zadjii-msft on GitHub (Sep 28, 2021). _discovered in the 1.12 bug bash on 9/28_ miniksa found this, but didn't investigate. Someone should.
claunia added the Resolution-DuplicateProduct-TerminalPriority-2Severity-Blocking labels 2026-01-31 04:36:51 +00:00
Author
Owner

@zadjii-msft commented on GitHub (Sep 29, 2021):

So the stack I'm getting looks something like:

0:000> k
 # Child-SP          RetAddr               Call Site
00 0000008e`4193ee70 00007ff9`43e4ca9d     ntdll!KiRaiseUserExceptionDispatcher+0x3a [minkernel\ntos\rtl\amd64\trampoln.asm @ 874] 
01 0000008e`4193ef40 00007ff8`df9f700f     KERNELBASE!LockFileEx+0x8d [minkernel\kernelbase\filehops.c @ 2557] 
02 0000008e`4193efb0 00007ff8`df9a3a95     Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::OpenFileReadSharedLocked+0x52e17 [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\FileUtils.cpp @ 51] 
03 0000008e`4193f030 00007ff8`df9a39d2     Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState::_read+0x95 [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\ApplicationState.cpp @ 175] 
04 0000008e`4193f160 00007ff8`df9a3814     Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState::ApplicationState+0x16e [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\ApplicationState.cpp @ 100] 
05 0000008e`4193f1f0 00007ff8`df9a37c1     Microsoft_Terminal_Settings_Model!winrt::impl::heap_implements<winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState>::heap_implements<winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState>+0x3c
06 0000008e`4193f240 00007ff8`df9a904a     Microsoft_Terminal_Settings_Model!winrt::make_self<winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState,std::filesystem::path>+0x4d [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\Generated Files\winrt\base.h @ 7789] 
07 0000008e`4193f290 00007ff8`dfa764bd     Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState::SharedInstance+0xae [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\ApplicationState.cpp @ 91] 
08 0000008e`4193f330 00007ff8`df9a36b7     Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::SettingsLoader::DisableDeletedProfiles+0x39 [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\CascadiaSettingsSerialization.cpp @ 312] 
09 0000008e`4193f3e0 00007ff8`df9a3363     Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::CascadiaSettings::LoadAll+0x20f [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\CascadiaSettingsSerialization.cpp @ 631] 
0a (Inline Function) --------`--------     Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::factory_implementation::CascadiaSettingsT<winrt::Microsoft::Terminal::Settings::Model::factory_implementation::CascadiaSettings,winrt::Microsoft::Terminal::Settings::Model::implementation::CascadiaSettings>::LoadAll+0xa [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\Generated Files\CascadiaSettings.g.h @ 42] 
0b 0000008e`4193f610 00007ff8`deb92b80     Microsoft_Terminal_Settings_Model!winrt::impl::produce<winrt::Microsoft::Terminal::Settings::Model::factory_implementation::CascadiaSettings,winrt::Microsoft::Terminal::Settings::Model::ICascadiaSettingsStatics>::LoadAll+0x1b [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 4293] 
0c 0000008e`4193f640 00007ff8`debf0e67     TerminalApp!winrt::impl::consume_TerminalApp_ITerminalPage<winrt::TerminalApp::ITerminalPage>::ApplicationVersion+0x38 [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\TerminalApp.h @ 1982] 
0d (Inline Function) --------`--------     TerminalApp!winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings::LoadAll::__l2::<lambda_bf1cf188e73bc29253cc88d4a3307376>::operator()+0xb [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 8368] 
0e 0000008e`4193f680 00007ff8`debcdbb2     TerminalApp!<lambda_bf1cf188e73bc29253cc88d4a3307376>::<lambda_invoker_cdecl>+0x17 [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 8368] 
0f 0000008e`4193f6b0 00007ff8`debcda86     TerminalApp!winrt::impl::factory_cache_entry<winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings,winrt::Microsoft::Terminal::Settings::Model::ICascadiaSettingsStatics>::call<winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings (__cdecl*)(winrt::Microsoft::Terminal::Settings::Model::ICascadiaSettingsStatics const &)>+0xea [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\base.h @ 6286] 
10 (Inline Function) --------`--------     TerminalApp!winrt::impl::call_factory_cast+0x3c [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\base.h @ 6325] 
11 (Inline Function) --------`--------     TerminalApp!winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings::LoadAll+0x3c [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 8368] 
12 0000008e`4193f740 00007ff8`debcd8e0     TerminalApp!winrt::TerminalApp::implementation::AppLogic::_TryLoadSettings+0x96 [C:\a\_work\1\s\src\cascadia\TerminalApp\AppLogic.cpp @ 779] 
13 0000008e`4193f8a0 00007ff8`dec3282c     TerminalApp!winrt::TerminalApp::implementation::AppLogic::LoadSettings+0x50 [C:\a\_work\1\s\src\cascadia\TerminalApp\AppLogic.cpp @ 862] 
14 (Inline Function) --------`--------     TerminalApp!winrt::TerminalApp::implementation::AppLogic::GetShowTabsInTitlebar+0x43aaf [C:\a\_work\1\s\src\cascadia\TerminalApp\AppLogic.cpp @ 745] 
15 0000008e`4193f940 00007ff7`90624056     TerminalApp!winrt::impl::produce<winrt::TerminalApp::implementation::AppLogic,winrt::TerminalApp::IAppLogic>::GetShowTabsInTitlebar+0x43abc [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\TerminalApp.h @ 2697] 
16 (Inline Function) --------`--------     WindowsTerminal!winrt::impl::consume_TerminalApp_IAppLogic<winrt::TerminalApp::IAppLogic>::GetShowTabsInTitlebar+0x21 [C:\a\_work\1\s\src\cascadia\WindowsTerminal\Generated Files\winrt\TerminalApp.h @ 224] 
17 0000008e`4193f970 00007ff7`90628ae0     WindowsTerminal!AppHost::AppHost+0x1f6 [C:\a\_work\1\s\src\cascadia\WindowsTerminal\AppHost.cpp @ 55] 
18 0000008e`4193fc50 00007ff7`9062cc42     WindowsTerminal!wWinMain+0x110 [C:\a\_work\1\s\src\cascadia\WindowsTerminal\main.cpp @ 140] 
19 (Inline Function) --------`--------     WindowsTerminal!invoke_main+0x21 [d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 118] 
1a 0000008e`4193fe70 00007ff9`454a6d50     WindowsTerminal!__scrt_common_main_seh+0x106 [d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288] 
1b 0000008e`4193feb0 00007ff9`46864c6b     KERNEL32!BaseThreadInitThunk+0x10 [clientcore\base\win32\client\thread.c @ 75] 
1c 0000008e`4193fee0 00000000`00000000     ntdll!RtlUserThreadStart+0x2b [minkernel\ntdll\rtlstrt.c @ 1152] 

VERIFIER STOP 0000000000000300: pid 0xE9D8: Invalid handle exception for current stack trace.

I'm 99% sure that this will go away when we merge #11222 because that will get rid of the LockFile call. @miniksa sanity check that this looks like the same stack you saw?

@zadjii-msft commented on GitHub (Sep 29, 2021): So the stack I'm getting looks something like: ``` 0:000> k # Child-SP RetAddr Call Site 00 0000008e`4193ee70 00007ff9`43e4ca9d ntdll!KiRaiseUserExceptionDispatcher+0x3a [minkernel\ntos\rtl\amd64\trampoln.asm @ 874] 01 0000008e`4193ef40 00007ff8`df9f700f KERNELBASE!LockFileEx+0x8d [minkernel\kernelbase\filehops.c @ 2557] 02 0000008e`4193efb0 00007ff8`df9a3a95 Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::OpenFileReadSharedLocked+0x52e17 [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\FileUtils.cpp @ 51] 03 0000008e`4193f030 00007ff8`df9a39d2 Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState::_read+0x95 [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\ApplicationState.cpp @ 175] 04 0000008e`4193f160 00007ff8`df9a3814 Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState::ApplicationState+0x16e [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\ApplicationState.cpp @ 100] 05 0000008e`4193f1f0 00007ff8`df9a37c1 Microsoft_Terminal_Settings_Model!winrt::impl::heap_implements<winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState>::heap_implements<winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState>+0x3c 06 0000008e`4193f240 00007ff8`df9a904a Microsoft_Terminal_Settings_Model!winrt::make_self<winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState,std::filesystem::path>+0x4d [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\Generated Files\winrt\base.h @ 7789] 07 0000008e`4193f290 00007ff8`dfa764bd Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::ApplicationState::SharedInstance+0xae [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\ApplicationState.cpp @ 91] 08 0000008e`4193f330 00007ff8`df9a36b7 Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::SettingsLoader::DisableDeletedProfiles+0x39 [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\CascadiaSettingsSerialization.cpp @ 312] 09 0000008e`4193f3e0 00007ff8`df9a3363 Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::implementation::CascadiaSettings::LoadAll+0x20f [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\CascadiaSettingsSerialization.cpp @ 631] 0a (Inline Function) --------`-------- Microsoft_Terminal_Settings_Model!winrt::Microsoft::Terminal::Settings::Model::factory_implementation::CascadiaSettingsT<winrt::Microsoft::Terminal::Settings::Model::factory_implementation::CascadiaSettings,winrt::Microsoft::Terminal::Settings::Model::implementation::CascadiaSettings>::LoadAll+0xa [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\Generated Files\CascadiaSettings.g.h @ 42] 0b 0000008e`4193f610 00007ff8`deb92b80 Microsoft_Terminal_Settings_Model!winrt::impl::produce<winrt::Microsoft::Terminal::Settings::Model::factory_implementation::CascadiaSettings,winrt::Microsoft::Terminal::Settings::Model::ICascadiaSettingsStatics>::LoadAll+0x1b [C:\a\_work\1\s\src\cascadia\TerminalSettingsModel\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 4293] 0c 0000008e`4193f640 00007ff8`debf0e67 TerminalApp!winrt::impl::consume_TerminalApp_ITerminalPage<winrt::TerminalApp::ITerminalPage>::ApplicationVersion+0x38 [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\TerminalApp.h @ 1982] 0d (Inline Function) --------`-------- TerminalApp!winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings::LoadAll::__l2::<lambda_bf1cf188e73bc29253cc88d4a3307376>::operator()+0xb [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 8368] 0e 0000008e`4193f680 00007ff8`debcdbb2 TerminalApp!<lambda_bf1cf188e73bc29253cc88d4a3307376>::<lambda_invoker_cdecl>+0x17 [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 8368] 0f 0000008e`4193f6b0 00007ff8`debcda86 TerminalApp!winrt::impl::factory_cache_entry<winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings,winrt::Microsoft::Terminal::Settings::Model::ICascadiaSettingsStatics>::call<winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings (__cdecl*)(winrt::Microsoft::Terminal::Settings::Model::ICascadiaSettingsStatics const &)>+0xea [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\base.h @ 6286] 10 (Inline Function) --------`-------- TerminalApp!winrt::impl::call_factory_cast+0x3c [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\base.h @ 6325] 11 (Inline Function) --------`-------- TerminalApp!winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings::LoadAll+0x3c [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\Microsoft.Terminal.Settings.Model.h @ 8368] 12 0000008e`4193f740 00007ff8`debcd8e0 TerminalApp!winrt::TerminalApp::implementation::AppLogic::_TryLoadSettings+0x96 [C:\a\_work\1\s\src\cascadia\TerminalApp\AppLogic.cpp @ 779] 13 0000008e`4193f8a0 00007ff8`dec3282c TerminalApp!winrt::TerminalApp::implementation::AppLogic::LoadSettings+0x50 [C:\a\_work\1\s\src\cascadia\TerminalApp\AppLogic.cpp @ 862] 14 (Inline Function) --------`-------- TerminalApp!winrt::TerminalApp::implementation::AppLogic::GetShowTabsInTitlebar+0x43aaf [C:\a\_work\1\s\src\cascadia\TerminalApp\AppLogic.cpp @ 745] 15 0000008e`4193f940 00007ff7`90624056 TerminalApp!winrt::impl::produce<winrt::TerminalApp::implementation::AppLogic,winrt::TerminalApp::IAppLogic>::GetShowTabsInTitlebar+0x43abc [C:\a\_work\1\s\src\cascadia\TerminalApp\Generated Files\winrt\TerminalApp.h @ 2697] 16 (Inline Function) --------`-------- WindowsTerminal!winrt::impl::consume_TerminalApp_IAppLogic<winrt::TerminalApp::IAppLogic>::GetShowTabsInTitlebar+0x21 [C:\a\_work\1\s\src\cascadia\WindowsTerminal\Generated Files\winrt\TerminalApp.h @ 224] 17 0000008e`4193f970 00007ff7`90628ae0 WindowsTerminal!AppHost::AppHost+0x1f6 [C:\a\_work\1\s\src\cascadia\WindowsTerminal\AppHost.cpp @ 55] 18 0000008e`4193fc50 00007ff7`9062cc42 WindowsTerminal!wWinMain+0x110 [C:\a\_work\1\s\src\cascadia\WindowsTerminal\main.cpp @ 140] 19 (Inline Function) --------`-------- WindowsTerminal!invoke_main+0x21 [d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 118] 1a 0000008e`4193fe70 00007ff9`454a6d50 WindowsTerminal!__scrt_common_main_seh+0x106 [d:\a01\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl @ 288] 1b 0000008e`4193feb0 00007ff9`46864c6b KERNEL32!BaseThreadInitThunk+0x10 [clientcore\base\win32\client\thread.c @ 75] 1c 0000008e`4193fee0 00000000`00000000 ntdll!RtlUserThreadStart+0x2b [minkernel\ntdll\rtlstrt.c @ 1152] ``` `VERIFIER STOP 0000000000000300: pid 0xE9D8: Invalid handle exception for current stack trace.` I'm 99% sure that this will go away when we merge #11222 because that will get rid of the `LockFile` call. @miniksa sanity check that this looks like the same stack you saw?
Author
Owner

@miniksa commented on GitHub (Sep 29, 2021):

@zadjii-msft that is the stack I briefly saw. If it's going away... dupe away.

@miniksa commented on GitHub (Sep 29, 2021): @zadjii-msft that **is** the stack I briefly saw. If it's going away... dupe away.
Author
Owner

@zadjii-msft commented on GitHub (Sep 29, 2021):

nice

/dup #11222

@zadjii-msft commented on GitHub (Sep 29, 2021): nice /dup #11222
Author
Owner

@ghost commented on GitHub (Sep 29, 2021):

Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!

@ghost commented on GitHub (Sep 29, 2021): Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!
Author
Owner

@DHowett commented on GitHub (Nov 3, 2021):

Weirdly, though, it seems like this is an "invalid file handle" error. By removing the LockFile call, aren't we just... I dunno, shooting the messenger? Yeah, LockFile failed, but only because it was given bad data?

@DHowett commented on GitHub (Nov 3, 2021): Weirdly, though, it seems like this is an "invalid file handle" error. By removing the `LockFile` call, aren't we just... I dunno, shooting the messenger? Yeah, `LockFile` failed, but only because it was given bad data?
Author
Owner

@lhecker commented on GitHub (Nov 3, 2021):

We (maybe me?) decided that we don't need to re-read the file anymore when writing to disk, because we can just move ApplicationState into the monarch process instead.

We added the file locking as a precaution so that two WTs don't accidentally overwrite each others files. The question is if we would still want this for the shared file. However I consider this to be a fairly minor issue personally. (It's a race condition, but unlike regular race conditions we don't really destroy anything in the process - we just loose state of up to 1s.)

@lhecker commented on GitHub (Nov 3, 2021): > We (maybe me?) decided that we don't need to re-read the file anymore when writing to disk, because we can just move ApplicationState into the monarch process instead. We added the file locking as a precaution so that two WTs don't accidentally overwrite each others files. The question is if we would still want this for the shared file. However I consider this to be a fairly minor issue personally. (It's a race condition, but unlike regular race conditions we don't really destroy anything in the process - we just loose state of up to 1s.)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#15378