Thank you, Sergey!

Looking for one more "+1”. Any volunteers?

Regards,
Dmitry
> On 17 Aug 2020, at 21:06, Sergey Bylokhov <sergey.bylok...@oracle.com> wrote:
> 
> Looks fine.
> 
> On 17.08.2020 02:32, Dmitry Markov wrote:
>> Hi Sergey,
>> I have added that information to InvokeInputMethodFunction(). Please find 
>> the new webrev here: http://cr.openjdk.java.net/~dmarkov/8232114/webrev.01/ 
>> <http://cr.openjdk.java.net/~dmarkov/8232114/webrev.01/>
>> Regards,
>> Dmitry
>>> On 15 Aug 2020, at 03:05, Sergey Bylokhov <sergey.bylok...@oracle.com 
>>> <mailto:sergey.bylok...@oracle.com> <mailto:sergey.bylok...@oracle.com 
>>> <mailto:sergey.bylok...@oracle.com>>> wrote:
>>> 
>>> On 12.08.2020 05:09, Dmitry Markov wrote:
>>>> TranslateMessage() does not invoke PeekMessage(). In our case 
>>>> TranslateMessage() is called by AWT. IME functionality may call 
>>>> PeekMessage() during TranslateMessage() execution. However that 
>>>> PeekMessage() call is intended for processing non-queued  messages, (i.e. 
>>>> the messages send via SendMessage() call).
>>>> I contacted Microsoft regarding this problem and one of their suggestions 
>>>> was to use PostMessage() instead of SendMessage() for IME messages to 
>>>> avoid IME internal data corruption and the crash.
>>>> The proposed fix was tested by the stress test for several weeks and no 
>>>> issues were observed. So I feel quite confident that it eliminates the 
>>>> issue.
>>>> There is no exact message which triggers the crash. Usually the crash is 
>>>> caused by one of the following messages: WM_AWT_ASSOCIATECONTEXT or 
>>>> WM_AWT_SETOPENSTATUS but several times I observed that it was triggered by 
>>>> WM_AWT_DESTROYCONTEXT or WM_AWT_CREATECONTEXT. It looks like almost every 
>>>> IME-related message may cause the crash.  I think SendMessage() call 
>>>> should be substituted by PostMessage() for all IME messages.
>>> 
>>> Ok, then please add this(or similar) information to the new method 
>>> "InvokeInputMethodFunction",
>>> otherwise it could be removed in the future/replaced back to the 
>>> sendMessage.
>>> 
>>>> Regards,
>>>> Dmitry
>>>>> On 12 Aug 2020, at 06:16, Sergey Bylokhov <sergey.bylok...@oracle.com 
>>>>> <mailto:sergey.bylok...@oracle.com> <mailto:sergey.bylok...@oracle.com 
>>>>> <mailto:sergey.bylok...@oracle.com>>> wrote:
>>>>> 
>>>>> Hi, Dmitry.
>>>>> 
>>>>> On 11.08.2020 01:07, Dmitry Markov wrote:
>>>>>> Problem description:
>>>>>> The root cause of the crash is the lack of synchronisation in 
>>>>>> imjpapi.dll. In particular when IME messages are processed in the 
>>>>>> message loop and another message triggered through a SendMessage() call, 
>>>>>> this clears the buffer context so on further processing the message loop 
>>>>>> in IME context will point to invalid memory buffer. Microsoft article 
>>>>>> devoted to this issue: 
>>>>>> https://docs.microsoft.com/en-us/troubleshoot/windows/win32/ime-crash-processing-cross-thread-sent-message
>>>>> 
>>>>> The documentation above also states that PeekMessage, called by the 
>>>>> TranslateMessage when the IME is ON, can proceed the posted messages as 
>>>>> well if that true then the current fix does not help.
>>>>> 
>>>>>> Fix:
>>>>>> Replace SendMessage() with PostMessage() for IME messages and implement 
>>>>>> event based mechanism to notify the sender that the message processing 
>>>>>> is completed.
>>>>> 
>>>>> What exact message broke the IME, the "WM_AWT_DESTROYCONTEXT"?
>>>>> 
>>>>>> Testing:
>>>>>> mach5 client tests (jtreg headful, jck, etc.) are green.
>>>>>> Regards,
>>>>>> Dmitry
>>>>> 
>>>>> 
>>>>> --
>>>>> Best regards, Sergey.
>>> 
>>> 
>>> --
>>> Best regards, Sergey.
> 
> 
> -- 
> Best regards, Sergey.

Reply via email to