Hi Chris,

that's a common practice for any kind of library-ish code, if there are no 
explicit check of interrupt status, it will be checked a by next operation 
which might be interrupted. in this particular case, I agree rethrowing it as 
an unchecked exception might be a good alternative.

-- Igor

> On Feb 11, 2020, at 10:03 PM, Chris Plummer <chris.plum...@oracle.com> wrote:
> 
> Hi Igor,
> 
> I guess I fail to see the benefit of this. Who is going to check the 
> interrupt status of this thread and do something meaningful with it? It seems 
> we would want to immediately propagate the failure by throwing a 
> RuntimeException. This will work well when called from a test since this is a 
> common way to fail a test. The other use of this code is by 
> VMProps.vmHasSAandCanAttach(). It looks like if a RuntimeException is thrown 
> the right thing will happen when SafeMap.put() catches the exception (it 
> catches all Throwables).
> 
> Chris
> 
> On 2/11/20 7:12 PM, Igor Ignatev wrote:
>> rather like this :
>> 
>>> } catch (InterruptedException e) {
>>>    Thread.currentThread().interrupt();
>>>    return false; // assume not signed
>>> }
>> 
>> — Igor
>> 
>>> On Feb 11, 2020, at 6:15 PM, Chris Plummer <chris.plum...@oracle.com 
>>> <mailto:chris.plum...@oracle.com>> wrote:
>>> 
>>> 
>>> Like this?
>>> 
>>>         } catch (InterruptedException e) {
>>>             Thread.currentThread().interrupt();
>>>             throw new RuntimeException(e);
>>>         }
>>> 
>>> Chris
>>> 
>>> On 2/11/20 2:23 PM, Igor Ignatyev wrote:
>>>> no, I meant to call Thread.currentThread().interrupt(), calling that will 
>>>> restore interrupted state of the thread, so an user of Platform class will 
>>>> be able to response to it appropriately, w/ your current code, the fact 
>>>> that the thread was interrupted will be missed, and in most cases it is 
>>>> not right thing to do.
>>>> 
>>>> -- Igor 
>>>> 
>>>>> On Feb 11, 2020, at 2:02 PM, Chris Plummer <chris.plum...@oracle.com 
>>>>> <mailto:chris.plum...@oracle.com>> wrote:
>>>>> 
>>>>> Hi Igor,
>>>>> 
>>>>> I'm not sure what you mean by restore the interrupt state. Do you mean 
>>>>> loop back to the waitFor() call?
>>>>> 
>>>>> thanks,
>>>>> 
>>>>> Chris
>>>>> 
>>>>> On 2/11/20 1:55 PM, Igor Ignatyev wrote:
>>>>>> Hi Chris,
>>>>>> 
>>>>>> I don't insist on (3), so I'm fine if you don't want to change that 
>>>>>> part. one thing I'd change though is to restore thread interrupted state 
>>>>>> at L#266 of Platform.java (no need to publish new webrev)
>>>>>> 
>>>>>> Thanks,
>>>>>> -- Igor
>>>>>> 
>>>>>>> On Feb 11, 2020, at 1:49 PM, Chris Plummer <chris.plum...@oracle.com 
>>>>>>> <mailto:chris.plum...@oracle.com>> wrote:
>>>>>>> 
>>>>>>> Hi Igor,
>>>>>>> 
>>>>>>> Here's an updated webrev:
>>>>>>> 
>>>>>>> http://cr.openjdk.java.net/~cjplummer/8238196/webrev.01/index.html 
>>>>>>> <http://cr.openjdk.java.net/~cjplummer/8238196/webrev.01/index.html>
>>>>>>> 
>>>>>>> I rebased to JDK 15 and made all the changes you suggested except for 
>>>>>>> (3). I did not think it is necessary since the code is only executed on 
>>>>>>> OSX. However, if you still feel allowing flexibility in the path 
>>>>>>> separator is important, I can add that change too.
>>>>>>> 
>>>>>>> thanks,
>>>>>>> 
>>>>>>> Chris
>>>>>>> 
>>>>>>> On 2/10/20 1:34 PM, Igor Ignatyev wrote:
>>>>>>>> Hi Chris,
>>>>>>>> 
>>>>>>>> in general it all looks good, I have a few comments (most of them are 
>>>>>>>> editorial):
>>>>>>>> in Platform.java:
>>>>>>>> 1. you have doubled spaced at line#238 (b/w boolean and isSignedOSX)
>>>>>>>> 2. as FileNotFoundException is IOException, there is no need to 
>>>>>>>> declare the former in the signature of isSignedOSX
>>>>>>>> 3. it's better to pass jdkPath, "bin" and "java" as separate arguments 
>>>>>>>> to Path.get, so the code won't depend on file separator
>>>>>>>> 4. you are waiting for codesign to finish w/o reading its cout / cerr, 
>>>>>>>> which might lead to a deadlock (if codesign will exhaust IO buffer 
>>>>>>>> before exiting), so you need to either create two separate threads to 
>>>>>>>> read cout and cerr or  redirect these streams them to files and read 
>>>>>>>> these files afterwards or just ignore cout/cerr by using 
>>>>>>>> Redirect.DISCARD. I'd personally recommend the latter as the result of 
>>>>>>>> codesign can be reliably deduced from its exitcode (0 - signed, 1 - 
>>>>>>>> verification failed, 2 - wrong arguments, 3 - not all requirements 
>>>>>>>> from R are satisfied) and using cout/cerr is somewhat fragile as there 
>>>>>>>> is no guarantee output format won't be changed.
>>>>>>>> 
>>>>>>>> the rest looks good to me.
>>>>>>>> 
>>>>>>>> -- Igor
>>>>>>>> 
>>>>>>>>> On Feb 10, 2020, at 11:48 AM, Chris Plummer <chris.plum...@oracle.com 
>>>>>>>>> <mailto:chris.plum...@oracle.com><mailto:chris.plum...@oracle.com 
>>>>>>>>> <mailto:chris.plum...@oracle.com>>> wrote:
>>>>>>>>> 
>>>>>>>>> Ping #2. It's not that hard of a review. Most of it is the new 
>>>>>>>>> Platform.isSignedOSX() method, which is well commented and pretty 
>>>>>>>>> straight froward.
>>>>>>>>> 
>>>>>>>>> thanks,
>>>>>>>>> 
>>>>>>>>> Chris
>>>>>>>>> 
>>>>>>>>> On 2/4/20 5:04 PM, Chris Plummer wrote:
>>>>>>>>>> Ping!
>>>>>>>>>> 
>>>>>>>>>> And I decided to push to 15 instead of 14. Will backport to 14 
>>>>>>>>>> eventually.
>>>>>>>>>> 
>>>>>>>>>> thanks,
>>>>>>>>>> 
>>>>>>>>>> Chris
>>>>>>>>>> 
>>>>>>>>>> On 1/30/20 10:20 PM, Chris Plummer wrote:
>>>>>>>>>>> Yes, you are correct:
>>>>>>>>>>> 
>>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8238196 
>>>>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8238196>
>>>>>>>>>>> http://cr.openjdk.java.net/~cjplummer/8238196/webrev.00 
>>>>>>>>>>> <http://cr.openjdk.java.net/~cjplummer/8238196/webrev.00>
>>>>>>>>>>> 
>>>>>>>>>>> thanks,
>>>>>>>>>>> 
>>>>>>>>>>> Chris
>>>>>>>>>>> 
>>>>>>>>>>> On 1/30/20 10:13 PM, Igor Ignatyev wrote:
>>>>>>>>>>>> Hi Chris,
>>>>>>>>>>>> 
>>>>>>>>>>>> http://cr.openjdk.java.net/~cjplummer/8236913/webrev.00Â 
>>>>>>>>>>>> <http://cr.openjdk.java.net/~cjplummer/8236913/webrev.00%C3%82> 
>>>>>>>>>>>> seems to be a webrev from another issue, should it have been 
>>>>>>>>>>>> http://cr.openjdk.java.net/~cjplummer/8238196/webrev.00/Â 
>>>>>>>>>>>> <http://cr.openjdk.java.net/~cjplummer/8238196/webrev.00/%C3%82> ?
>>>>>>>>>>>> 
>>>>>>>>>>>> -- Igor
>>>>>>>>>>>> 
>>>>>>>>>>>>> On Jan 30, 2020, at 10:10 PM, Chris Plummer 
>>>>>>>>>>>>> <chris.plum...@oracle.com 
>>>>>>>>>>>>> <mailto:chris.plum...@oracle.com><mailto:chris.plum...@oracle.com 
>>>>>>>>>>>>> <mailto:chris.plum...@oracle.com>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Please review the following fix for some SA tests that are 
>>>>>>>>>>>>> failing on Mac OS X 10.14.5 and later:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8238196 
>>>>>>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8238196>
>>>>>>>>>>>>> http://cr.openjdk.java.net/~cjplummer/8236913/webrev.00 
>>>>>>>>>>>>> <http://cr.openjdk.java.net/~cjplummer/8236913/webrev.00>
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The issue is that SA can't attach to a signed binary starting 
>>>>>>>>>>>>> with 10.14.5. There is no workaround for this, so these tests are 
>>>>>>>>>>>>> being disabled when it is detected that the binary is signed and 
>>>>>>>>>>>>> we are running on 10.14 or later (I chose all 10.14 releases to 
>>>>>>>>>>>>> simplify the check).
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Some background may help explain the fix. In order for SA to 
>>>>>>>>>>>>> attach to a live process (not a core file) on OSX, either the 
>>>>>>>>>>>>> attaching process (ie. the test) has to be run as root, or sudo 
>>>>>>>>>>>>> needs to be supported. However, the only tests that make the sudo 
>>>>>>>>>>>>> check are the 20 or so that use ClhsdbLauncher. The rest all rely 
>>>>>>>>>>>>> on "@requires vm.hasSAandCanAttach" to filter out tests that use 
>>>>>>>>>>>>> SA attach. vm.hasSAandCanAttach only checks if the test is being 
>>>>>>>>>>>>> run as root. Thus all our non-ClhsdbLauncher tests that SA attach 
>>>>>>>>>>>>> to a live process are currently not run unless they are run as 
>>>>>>>>>>>>> root. 8238268 [1] has been filed to address this, making it so 
>>>>>>>>>>>>> all the tests will attempt to use sudo if not run as root.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Because of the difference in how ClhsdbLauncher tests and 
>>>>>>>>>>>>> "@requires vm.hasSAandCanAttach" tests check to see if they are 
>>>>>>>>>>>>> runnable, this fix needs to address both types of checks. The 
>>>>>>>>>>>>> common code for both these cases is Platform.shouldSAAttach(), 
>>>>>>>>>>>>> which on OSX basically equates to check to see if we are running 
>>>>>>>>>>>>> as root. I changed it to also return false if running on signed 
>>>>>>>>>>>>> binary with 10.14 or later. However, this confused the 
>>>>>>>>>>>>> ClhsdbLauncher use of Platform.shouldSAAttach() somewhat, since 
>>>>>>>>>>>>> it assumed a false result only happens because you are not 
>>>>>>>>>>>>> running as root (in which case it would then check if sudo will 
>>>>>>>>>>>>> work). So ClhsdbLauncher now has double check that the false 
>>>>>>>>>>>>> result was not because of running a signed binary. If it is 
>>>>>>>>>>>>> signed, it won't do the sudo check. This will get cleaned up with 
>>>>>>>>>>>>> 8238268 [1], which will move the sudo check into 
>>>>>>>>>>>>> Platform.shouldSAAttach().
>>>>>>>>>>>>> 
>>>>>>>>>>>>> thanks,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Chris
>>>>>>>>>>>>> 
>>>>>>>>>>>>> [1] https://bugs.openjdk.java.net/browse/JDK-8238268 
>>>>>>>>>>>>> <https://bugs.openjdk.java.net/browse/JDK-8238268>
>>>>> 
>>>> 
>>> 
> 

Reply via email to