RFR: 8000975: (process) Merge UNIXProcess.java.bsd & UNIXProcess.java.linux (& .solaris & .aix)

roger riggs roger.riggs at oracle.com
Tue May 6 16:01:24 UTC 2014


Hi Peter,

Looks fine to me.

Many thanks, Roger

On 5/4/2014 6:26 AM, Peter Levart wrote:
>
> On 05/04/2014 12:12 PM, Peter Levart wrote:
>> Hi Alan, Martin,
>>
>> Thanks for reviews. I have prepared another webrev based on your 
>> feedback:
>>
>> http://cr.openjdk.java.net/~plevart/jdk9-dev/UNIXProcess/webrev.08/
>>
>
> Ah, I've forgotten to mention the most important change from webrev.07.
>
> Original code wraps the processReaperExecutor construction into the 
> doPrivileged() call. I think this was not needed.
>
> The Executors.newCachedThreadPool() does not need any special 
> privileges. And construction of nested class 
> ProcessReaperThreadFactory also didn't need any special privileges - 
> apart from static initialization which called the getRootThreadGroup() 
> method. But that method did it's own doPrivileged() wrapping in order 
> to be able to climb the ThreadGroup hierarchy (which requires 
> privilege). In webrev.07 I followed original code and wrapped the 
> construction of a processReaperExecutor into a doPrivileged() although 
> in webrev.07 the rootThreadGroup search happens as part of UNIXProcess 
> static initialization and is already wrapped in doPrivileged(). In 
> webrev.08 I removed this superfluous doPrivileged(). I think this is 
> correct. SecurityManagerClinit test passes.
>
> Regards, Peter
> *
> *
>> Comments inline...
>>
>> On 04/30/2014 05:17 PM, Alan Bateman wrote:
>>> I reviewed previous rounds and you've addressed my points so I think 
>>> I'm mostly happy with this. As some point I think we should look at 
>>> Platform again as there may be an opportunity later in JDK 9 to move 
>>> it out of UNIXProcess.
>>>
>>> One thing that I wasn't sure about is the additions to the @author 
>>> tags as we've mostly been trying not to grow these (contentious 
>>> topic, I don't have a strong opinion as I never use @author).
>>
>> I have removed myself, but left all the others (merged from all 4 
>> files). It's true that mercurial keeps track of authors and it's not 
>> hard to find out who's responsible for what part of code in case 
>> someone needs to ask the author about the not so obvious things, but 
>> refactorings like this, which eliminate entire files and move their 
>> content to other places, make this tracking harder.
>>
>>>
>>> A minor comment looking at the latest webrev.07 is that some of the 
>>> lines are very long. It's not a problem now but I could image future 
>>> side-by-side reviews needing a scroll 
>>> bar.DeferredCloseProcessPipeInputStream is very long too.
>>
>> I split the longer lines now. The DeferredCloseProcessPipeInputStream 
>> is admittedly a long name, but it's not public and I tried to express 
>> the fact that it is a class that merges the functionalities of 
>> DeferedCloseInputStream and ProcessPipeInputStream (in .aix file it 
>> was called ProcessPipeInputStream as it was derived from it, but we 
>> can't have two with same names in common file). I hope in further 
>> re-factoring we can merge/consolidate these wrapper streams too and 
>> at that time I think they could be renamed. For now I wanted to keep 
>> the functionality as-is. But I can rename it if so desired, I just 
>> can't think of a suitable name.
>>
>>
>> On 04/30/2014 06:25 PM, Martin Buchholz wrote:
>>> Belated review.
>>>
>>> Peter, thank you very much for taking on this difficult unification 
>>> task.  This is great work!
>>> Comments:
>>> ---
>>> ---
>>> +                case SOLARIS:
>>> +                    if (osArch.equals("x86")) { osArch = "i386"; }
>>>
>>> It's very sad that ... there's no portable way of getting the name 
>>> of libarchdir.  I thought os.arch system property would suffice, but 
>>> apparently not on Solaris?
>>
>> ...and BSD (OS X). Is OS X missing the architecture sub-directories 
>> because it only supports one architecture now or because it used to 
>> employ "fat" (multi-architecture) binaries?
>>
>>>
>>> ---
>>> To avoid repetition, I would iniitalize with a vararg list of launch 
>>> mechanisms, of which the first one is always the default.
>>> +        LINUX(LaunchMechanism.VFORK, 
>>> EnumSet.of(LaunchMechanism.FORK, LaunchMechanism.VFORK)),
>>>
>>> LINUX(LaunchMechanism.VFORK, LaunchMechanism.FORK),
>>
>> I've done that. It looks nicer now.
>>
>>> ---
>>> Never use toUpperCase without a Locale, to avoid the "Turkish i 
>>> problem"
>>> +                            lm = 
>>> LaunchMechanism.valueOf(s.toUpperCase());
>>> toUpperCase(Locale.ENGLISH)
>>
>> Oops, thanks for spotting this. Fixed.
>>
>>
>> Regards, Peter
>>
>>>
>>>
>>>
>>>
>>> On Wed, Apr 30, 2014 at 8:17 AM, Alan Bateman 
>>> <Alan.Bateman at oracle.com <mailto:Alan.Bateman at oracle.com>> wrote:
>>>
>>>     On 25/04/2014 17:47, roger riggs wrote:
>>>
>>>         Hi Peter,
>>>
>>>         Including the test update with the updated changeset is fine.
>>>
>>>         (I think Alan had some comments on the refactoring and has
>>>         not yet had a chance to comment).
>>>
>>>         Thanks, Roger
>>>
>>>     I reviewed previous rounds and you've addressed my points so I
>>>     think I'm mostly happy with this. As some point I think we should
>>>     look at Platform again as there may be an opportunity later in
>>>     JDK 9 to move it out of UNIXProcess.
>>>
>>>     One thing that I wasn't sure about is the additions to the
>>>     @author tags as we've mostly been trying not to grow these
>>>     (contentious topic, I don't have a strong opinion as I never use
>>>     @author).
>>>
>>>     A minor comment looking at the latest webrev.07 is that some of
>>>     the lines are very long. It's not a problem now but I could image
>>>     future side-by-side reviews needing a scroll
>>>     bar.DeferredCloseProcessPipeInputStream is very long too.
>>>
>>>     -Alan.
>>>
>>>
>>
>




More information about the core-libs-dev mailing list