В моем многопоточном приложении, где несколько потоков инициализируются mapiinitialize с помощью
mapi.MAPIInitialize((0, mapi.MAPI_MULTITHREAD_NOTIFICATIONS))
mapi.MAPIUninitialize() crashes. I got the following call stack from windbg.
mso30win32client!Ordinal250+0x32423
mso30win32client!Ordinal126+0x5b
mso30win32client!Ordinal1337+0x39d
mso30win32client!Ordinal1470+0x17e
mso30win32client!Ordinal1470+0xe
mso40uiwin32client!Ordinal2408+0x19
olmapi32!LINKEDLIST_RemoveKey+0x4e6
olmapi32!HrUninitMso+0x36
olmapi32!MAPIUninitialize+0x9
MSMAPI32!MAPIUninitialize+0x42
MAPI32!MAPIUninitialize+0x5b
mapi+0x11d9
Каждый поток последовательно выполняет только следующие вызовы mapi(Outlook 2016):
1 MAPIInitialize
2 MAPIAdminProfiles
3 HrQueryAllRows
4 session=MAPILogonEx
5 session.logoff
6 MAPIUninitialize
Наблюдение:
Если есть два потока T1 и T2.
T1 входит в сеанс до T2, а T1 выполняет MAPIUninitialize после T2, это не приводит к сбою,
Но если T1 входит в сеанс до T2 и T1 выполняет MAPIUninitialize до T2, а затем вызов MAPIUninitialize приводит к сбою с указанным выше стеком.
Сбой в Outlook 2016 отлично работает только с Outlook 2013 и более ранними версиями.