On 28 Jan 2015, at 20:48, Ivan Gerasimov <ivan.gerasi...@oracle.com> wrote:
> Hi Chris! > > I think it's better to pass the last argument to SetHandleInformation as 0 > rather than FALSE. > This argument is DWORD flag, which is a bit subset of the second argument. Agreed. I will make the change before pushing. Thanks, -Chris. > Sincerely yours, > Ivan > > On 28.01.2015 23:01, Chris Hegarty wrote: >> Reviving an old code review [1], after further investigation… >> >> Pertinent details from previous review: >> "A socket connection which is returned by ServerSocket.accept() is >> inherited by a child process. The expected behavior is that the socket >> connection is not inherited by the child process. This is an oversight >> in the original implementation, that only sets HANDLE_FLAG_INHERIT for >> newly created sockets. >> >> The native socket returned by ServerSocket.accept() should be configured >> so it will not be inherited by a child process, >> SetHandleInformation(<HANDLE>, HANDLE_FLAG_INHERIT, FALSE)." >> http://cr.openjdk.java.net/~chegar/8067105/webrev.00/webrev/ >> >> — >> >> There were on objections to the changes, since they are mainly benign, but I >> took the action to investigate why we are calling CreateProcess with >> bInheritHandles set to TRUE. It appears that, without major work, we cannot >> change this. >> >> From 7147084 [2]: >> >> Java does not provide the API to change inherit-bit for any handle. More >> over, since at least the JDK 6, it is assumed that all Java-created handles >> have no installed inherit-bit . The only handles that change the inherit-bit >> to 1 in the Java call are the handles of redirected Input, Output, and Error >> streams (IOE streams for short) for child process. That is the way these >> redirect the streams work. That's why we can not give up the nomination in >> [TRUE] the parameter [bInheritHandles] in the [CreateProcess] call. And I >> want to mention again that this is the only place in JDK where >> Java installs the inherit-bit. Java itself does not use handle inheritance. >> — >> >> Ivan pointed out that HANDLE_FLAG_INHERIT will not always work, in the case >> of Layered Service Providers, see [3], but it will work in the standard case. >> >> Finally, I think that we will need to revisit the process creation >> implementation at some point, to see if bInheritHandles can be set to FALSE, >> but that is a larger, more significant, piece of work, that should be done >> separately. >> >> -Chris. >> >> P.S. if there are no objections to the changes I will amend an existing test >> case to cover these new cases. >> >> [1] http://mail.openjdk.java.net/pipermail/net-dev/2014-December/008789.html >> [2] >> https://bugs.openjdk.java.net/browse/JDK-7147084?focusedCommentId=13322689&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13322689 >> [3] >> http://stackoverflow.com/questions/12058911/can-tcp-socket-handles-be-set-not-inheritable >> >