LexActivator 3.14.0 internal thread crash at shutdown?

I once reported the same error for the 3.12.x versions, and I think it got fixed then. But today I again ended up on the same error.

The context:

  • Windows 10, latest updates installed.
  • Visual Studio 2019, latest version.
  • Debug build and debug libs.
  • Both LexActivator and LexFloatClient statically linked.
  • Stand-alone windows application.
  • The license was already activated in a previous session quite a few days ago, and no license update was performed since, and certainly not during the crashing session.
  • All default LA functions got called directly at startup (SetProductData, SetProductId, SetAppVersion, IsLicenseGenuine, etc.).
  • A license callback routine had been registered with SetLicenseCallback for the LA lib, but not for the LF lib, but it got nullptr’ed directly on the 1st callback. (no proof of this, but that’s just how this app works per definition, without exception, so I don’t expect anything else.)
  • I closed the app with Alt-F4, but this time not split-second after opening it like in my previous 3.12.x bug reports; I must have had it open for quite a few minutes (though not for hours, i.e. not anything near the license server sync period).
  • I did do some debugging work in the app, but nothing fancy (only some breakpoints and variable value checking, definitely not code recompile & resume or such).

I managed to catch the following callstack; I hope it helps you guys pinpoint it a bit…

Test-Environment.exe!Botan::BigInt::sig_words(void)
Test-Environment.exe!Botan::BigInt::BigInt(class Botan::BigInt const &)
Test-Environment.exe!Botan::operator*(class Botan::BigInt const &,class Botan::BigInt const &)
Test-Environment.exe!std::_Tree<class std::_Tmap_traits<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >,0> >::count(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)
Test-Environment.exe!Botan::inverse_mod(class Botan::BigInt const &,class Botan::BigInt const &)
Test-Environment.exe!Botan::Montgomery_Exponentiator::Montgomery_Exponentiator(class Botan::BigInt const &,enum Botan::Power_Mod::Usage_Hints)
Test-Environment.exe!Botan::Core_Engine::mod_exp(class Botan::BigInt const &,enum Botan::Power_Mod::Usage_Hints)
Test-Environment.exe!Botan::Power_Mod::set_modulus(class Botan::BigInt const &,enum Botan::Power_Mod::Usage_Hints)
Test-Environment.exe!Botan::Power_Mod::Power_Mod(class Botan::BigInt const &,enum Botan::Power_Mod::Usage_Hints)
Test-Environment.exe!Botan::Fixed_Exponent_Power_Mod::Fixed_Exponent_Power_Mod(class Botan::BigInt const &,class Botan::BigInt const &,enum Botan::Power_Mod::Usage_Hints)
Test-Environment.exe!Botan::RSA_Public_Operation::RSA_Public_Operation(class Botan::RSA_PublicKey const &)
Test-Environment.exe!Botan::Core_Engine::get_verify_op(class Botan::Public_Key const &)
Test-Environment.exe!Botan::PK_Verifier::PK_Verifier(class Botan::Public_Key const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,enum Botan::Signature_Format)
Test-Environment.exe!LexCrypto::RsaVerify(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
Test-Environment.exe!LexJwt::Verify(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
Test-Environment.exe!LexValidator::ValidateActivation(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class ActivationPayload &,bool)
Test-Environment.exe!LexActivationService::ActivateFromServer(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class ProductDataDto,class ActivationPayload &,class UserCredential &,class std::vector<class ActivationMeterAttributeViewmodel,class std::allocator<class ActivationMeterAttributeViewmodel> >,bool)
Test-Environment.exe!ThreadTimerCallback(void *,unsigned char)
ntdll.dll!00007ff95a9125f9()
ntdll.dll!00007ff95a90e9d9()
ntdll.dll!00007ff95a8e276a()
kernel32.dll!00007ff95a7e7034()
ntdll.dll!00007ff95a91d0d1()

Hi Carl,

We are aware of this issue in case of debug builds. This hasn’t been fixed yet.

First server sync occurs every time you start the app within 3 secs.

Hi,
Is it an issue only in debug build? I have some crashes in release as well, so I’m wondering whether it can be related.
In particular, I understood that there are some threads rrunning to check/sync periodicaly the license, how can we make sure that none of these threads are running when closing the application?

Hi,

We have fixed these issues in the latest version. Please try the latest version v3.14.4

https://docs.cryptlex.com/changelog/lexactivator