You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Regis Xu (JIRA)" <ji...@apache.org> on 2010/09/29 07:40:32 UTC
[jira] Resolved: (HARMONY-6662) Spin wait in
StartTlsResponseImpl.java
[ https://issues.apache.org/jira/browse/HARMONY-6662?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Regis Xu resolved HARMONY-6662.
-------------------------------
Fix Version/s: 5.0M16
Resolution: Fixed
The fix was applied to trunk at r1002480, please verify if it resolve your problem. Thanks.
> Spin wait in StartTlsResponseImpl.java
> --------------------------------------
>
> Key: HARMONY-6662
> URL: https://issues.apache.org/jira/browse/HARMONY-6662
> Project: Harmony
> Issue Type: Bug
> Components: Classlib
> Affects Versions: 6.0M1
> Environment: Windows XP
> Reporter: Wendy Feng
> Assignee: Regis Xu
> Fix For: 5.0M16
>
> Original Estimate: 7h
> Remaining Estimate: 7h
>
> I found spin wait in modules/jndi/src/main/java/org/apache/harmony/jndi/provider/ldap/ext/StartTlsResponseImpl.java
> public class StartTlsResponseImpl extends StartTlsResponse {
> ...
> public SSLSession negotiate(SSLSocketFactory factory) throws IOException {
> ...
> sslSocket.startHandshake();
> while (!isHandshaked) {
> // Wait for handshake finish.
> }
> ...
> }
> ...
> }
>
> Spin wait for isHandshaked is updated by other threads.
> Consequence:
> Bad performance due to exhaustive use of CPU time.
> In current Java memory model, even if the isHandshaked field is updated by other threads, current thread that spins checking for isHandshaked may not see the up-to-date value, turn the code into an infinite loop.
> I suggest to use wait/notify for synchronization as follow
> public class StartTlsResponseImpl extends StartTlsResponse {
> private static final Object monitor = new Object():
> ...
> public SSLSession negotiate(SSLSocketFactory factory) throws IOException {
> ...
> sslSocket.startHandshake();
> synchronized(monitor){
> while (!isHandshaked) {
> monitor.wait();
> }
> }
> ...
> }
> ...
> }
> Pls make sure to change the code that will update the value of isHandshaked correspondingly.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.