<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Hi Dmitry,<br>
<br>
The fix looks well, but I have next a few comments relatively to it:<br>
<br>
1) In the new function "AwtToolkit::InvokeInputMethodFunction(UINT,
WPARAM, LPARAM)", which you created, the call "PostMessage(msg,
wParam, lParam);" may fail and return "0", so in that case the next
call "::WaitForSingleObject(m_inputMethodWaitEvent, INFINITE);" may
become blocked forever. I suggest to handle this possible failure,
for example in the next way:<br>
<br>
if (PostMessage(msg, wParam, lParam)) {<br>
::WaitForSingleObject(m_inputMethodWaitEvent, INFINITE);<br>
return m_inputMethodData;<br>
}<br>
return 0;<br>
<br>
2) In "AwtToolkit::WndProc" function in the code handling the
messages: "WM_AWT_HANDLE_NATIVE_IME_EVENT",
"WM_AWT_ACTIVATEKEYBOARDLAYOUT", "WM_AWT_OPENCANDIDATEWINDOW" I do
not find calls to "Imm*" system functions. Therefore maybe there is
no need to send these messages through "PostMessage"?<br>
<br>
Thank you,<br>
Anton<br>
<br>
<div class="moz-cite-prefix">On 18/08/2020 06:46, Dmitry Markov
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:0C09A39C-E0BA-4C88-B2BD-7549CA7A3F50@oracle.com">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Thank you, Sergey!
<div class=""><br class="">
</div>
<div class="">Looking for one more "+1”. Any volunteers?<br
class="">
<div><br class="">
</div>
<div>Regards,</div>
<div>Dmitry<br class="">
<blockquote type="cite" class="">
<div class="">On 17 Aug 2020, at 21:06, Sergey Bylokhov <<a
href="mailto:sergey.bylokhov@oracle.com" class=""
moz-do-not-send="true">sergey.bylokhov@oracle.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class=""><span style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none; float: none; display: inline
!important;" class="">Looks fine.</span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;" class="">
<br style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none; float: none; display: inline
!important;" class="">On 17.08.2020 02:32, Dmitry Markov
wrote:</span><br style="caret-color: rgb(0, 0, 0);
font-family: Helvetica; font-size: 12px; font-style:
normal; font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;" class="">
<blockquote type="cite" style="font-family: Helvetica;
font-size: 12px; font-style: normal; font-variant-caps:
normal; font-weight: normal; letter-spacing: normal;
orphans: auto; text-align: start; text-indent: 0px;
text-transform: none; white-space: normal; widows: auto;
word-spacing: 0px; -webkit-text-size-adjust: auto;
-webkit-text-stroke-width: 0px; text-decoration: none;"
class="">Hi Sergey,<br class="">
I have added that information to
InvokeInputMethodFunction(). Please find the new webrev
here:<span class="Apple-converted-space"> </span><a
href="http://cr.openjdk.java.net/~dmarkov/8232114/webrev.01/"
class="" moz-do-not-send="true">http://cr.openjdk.java.net/~dmarkov/8232114/webrev.01/</a><br
class="">
Regards,<br class="">
Dmitry<br class="">
<blockquote type="cite" class="">On 15 Aug 2020, at
03:05, Sergey Bylokhov <<a
href="mailto:sergey.bylokhov@oracle.com" class=""
moz-do-not-send="true">sergey.bylokhov@oracle.com</a><span
class="Apple-converted-space"> </span><<a
href="mailto:sergey.bylokhov@oracle.com" class=""
moz-do-not-send="true">mailto:sergey.bylokhov@oracle.com</a>>>
wrote:<br class="">
<br class="">
On 12.08.2020 05:09, Dmitry Markov wrote:<br class="">
<blockquote type="cite" class="">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).<br class="">
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.<br
class="">
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.<br
class="">
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.<br class="">
</blockquote>
<br class="">
Ok, then please add this(or similar) information to
the new method "InvokeInputMethodFunction",<br
class="">
otherwise it could be removed in the future/replaced
back to the sendMessage.<br class="">
<br class="">
<blockquote type="cite" class="">Regards,<br class="">
Dmitry<br class="">
<blockquote type="cite" class="">On 12 Aug 2020, at
06:16, Sergey Bylokhov <<a
href="mailto:Sergey.Bylokhov@oracle.com"
class="" moz-do-not-send="true">Sergey.Bylokhov@oracle.com</a><span
class="Apple-converted-space"> </span><<a
href="mailto:Sergey.Bylokhov@oracle.com"
class="" moz-do-not-send="true">mailto:Sergey.Bylokhov@oracle.com</a>>>
wrote:<br class="">
<br class="">
Hi, Dmitry.<br class="">
<br class="">
On 11.08.2020 01:07, Dmitry Markov wrote:<br
class="">
<blockquote type="cite" class="">Problem
description:<br class="">
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:
<a
href="https://docs.microsoft.com/en-us/troubleshoot/windows/win32/ime-crash-processing-cross-thread-sent-message"
class="" moz-do-not-send="true">https://docs.microsoft.com/en-us/troubleshoot/windows/win32/ime-crash-processing-cross-thread-sent-message</a><br
class="">
</blockquote>
<br class="">
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.<br class="">
<br class="">
<blockquote type="cite" class="">Fix:<br class="">
Replace SendMessage() with PostMessage() for IME
messages and implement event based mechanism to
notify the sender that the message processing is
completed.<br class="">
</blockquote>
<br class="">
What exact message broke the IME, the
"WM_AWT_DESTROYCONTEXT"?<br class="">
<br class="">
<blockquote type="cite" class="">Testing:<br
class="">
mach5 client tests (jtreg headful, jck, etc.)
are green.<br class="">
Regards,<br class="">
Dmitry<br class="">
</blockquote>
<br class="">
<br class="">
--<br class="">
Best regards, Sergey.<br class="">
</blockquote>
</blockquote>
<br class="">
<br class="">
--<br class="">
Best regards, Sergey.<br class="">
</blockquote>
</blockquote>
<br style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;" class="">
<br style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none; float: none; display: inline
!important;" class="">--<span
class="Apple-converted-space"> </span></span><br
style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none;" class="">
<span style="caret-color: rgb(0, 0, 0); font-family:
Helvetica; font-size: 12px; font-style: normal;
font-variant-caps: normal; font-weight: normal;
letter-spacing: normal; text-align: start; text-indent:
0px; text-transform: none; white-space: normal;
word-spacing: 0px; -webkit-text-stroke-width: 0px;
text-decoration: none; float: none; display: inline
!important;" class="">Best regards, Sergey.</span></div>
</blockquote>
</div>
<br class="">
</div>
</blockquote>
<br>
</body>
</html>