harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Ellison (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (HARMONY-6653) Use instance lock to protect static share data in ObjID.java
Date Mon, 27 Sep 2010 12:28:33 GMT

     [ https://issues.apache.org/jira/browse/HARMONY-6653?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Tim Ellison resolved HARMONY-6653.
----------------------------------

         Assignee: Tim Ellison
    Fix Version/s: 5.0M16
       Resolution: Fixed

Thanks Wendy.

Fix applied to RMI module at repo revision r999623.

Please verify it was fixed as you expected.


> Use instance lock to protect static share data in ObjID.java
> ------------------------------------------------------------
>
>                 Key: HARMONY-6653
>                 URL: https://issues.apache.org/jira/browse/HARMONY-6653
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>    Affects Versions: 6.0M1
>         Environment: Window XP
>            Reporter: Wendy Feng
>            Assignee: Tim Ellison
>             Fix For: 5.0M16
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> I found unsafe synchonrization in ObjID.java as follow:
> private static class NumberGenerator {
>  static long numCounter = 65536; 
> ...
> synchronized long nextLong() {
>             return useRandom ? sGenerator.nextLong() : numCounter++;
>         }
> ...
> }
> numCounter is a static class field. querySerialNumber increment (non-atomic) operation
is in a synchronized method which means it is protected by "this".
> Consequence: 
> Different object instances will synchronize on different "this", numCounter increment
is not protected by a uniform lock. It results in race condition in numCounter increment,
thus having incorrect numCounter value.
> It would be more proper to write the code as follows:
> private static class NumberGenerator {
>  static long numCounter = 65536; 
> private static final Object monitor = new Object()
> ...
> long nextLong() {
>             synchornized(monitor)
>                 {
>                     return useRandom ? sGenerator.nextLong() : numCounter++;
>                   }
>         }
> ...
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message