RFR: 8000975: (process) Merge UNIXProcess.java.bsd & UNIXProcess.java.linux (& .solaris & .aix)
Peter Levart
peter.levart at gmail.com
Mon May 12 15:51:31 UTC 2014
On 05/07/2014 11:04 PM, Martin Buchholz wrote:
> Hi Peter,
>
> Your last version version looks very good. Approved! I'm reduced to
> asking you to fix ancient buglets of mine.
>
> *"I'd spell creat with an e.*"
>
>
> 188 * Create a process. Depending on the mode flag, this is done by
> *"I'd spell Create with an s.*"
>
>
>
Alan, Martin, Roger, thank you for your patience in reviewing this.
Thanks also to Paul, David M., Rob and Volker for comments and testing.
I have just pushed this changeset to jdk9-dev with a little javadoc
tweak on a private native method suggested by Martin, fixing also the
description of the 'mode' parameter to be in-sync with what it really
means in native code.
We can take this as a basis for consolidating some more code after some
bake-in time...
Regards, Peter
>
>
>
> On Wed, May 7, 2014 at 12:42 AM, Peter Levart <peter.levart at gmail.com
> <mailto:peter.levart at gmail.com>> wrote:
>
> Hi Martin,
>
> I have restructured the processReaperExecutor construction. It now
> incorporates system thread group search and thread pool
> construction in one doPrivileged call. I also extracted the
> creation of ThreadFactory into a local variable so it's more
> explicit now. Here's the webrev:
>
> http://cr.openjdk.java.net/~plevart/jdk9-dev/UNIXProcess/webrev.09/ <http://cr.openjdk.java.net/%7Eplevart/jdk9-dev/UNIXProcess/webrev.09/>
>
> ...java/lang/ProcessBuilder tests still pass.
>
> Regards, Peter
>
> P.S. I don't belive Executors.newCachedTreadPool() could
> strengthen security in future, since this would break existing
> user code. The javadoc does not specify any SecurityExceptions.
> But anyway - wrapping the whole logic of processReaperExecutor
> construction in one doPrivileged call allowed me to use local
> variables instead of private static final fields for
> systemThreadGroup and threadFactory, so this looks nicer too.
>
>
>
> On 05/06/2014 07:41 PM, Martin Buchholz wrote:
>>
>>
>>
>> On Sun, May 4, 2014 at 3:26 AM, Peter Levart
>> <peter.levart at gmail.com <mailto:peter.levart at gmail.com>> wrote:
>>
>>
>> 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.
>>
>>
>> Although I think you're right with the current implementation, it
>> seems too brittle to me to remove the doPrivileged, since you
>> have no idea what future changes to newCachedThreadPool() might
>> do (or what other JDK implementations might do); notably it might
>> instantiate some kind of micro-manager thread or do some other
>> privileged operation.
>>
>> If you want to have only one call to doPrivileged, you can cause
>> both rootThreadGroup and processReaperExecutor to be initialized
>> in one static block, although you will need to jump through some
>> hoops to keep these fields final.
>>
>> ---
>>
>> As it stands,
>>
>> Executors.newCachedThreadPool(grimReaper -> {
>>
>> doesn't mention either the type ThreadFactory or Runnable.
>>
>> It might be clearer (more verbosity in the spirit of Java) if you
>> used explicit ThreadFactory type
>>
>> ThreadFactory factory = grimReaper -> ...
>
>
More information about the core-libs-dev
mailing list