yes, I'm fine w/ that.
-- Igor 

> On Feb 12, 2020, at 3:48 PM, Chris Plummer <chris.plum...@oracle.com> wrote:
> 
> On 2/12/20 2:15 PM, David Holmes wrote:
>> On 13/02/2020 5:02 am, Chris Plummer wrote:
>>> Hi David,
>>> 
>>>> What you have below is a mix of #2 and #3 - you convert to a generic 
>>>> exception but also re-assert the interrupt state. That's a little unusual. 
>>> That what I also thought which is why I was suggesting not doing the 
>>> interrupt() call and only throwing the RuntimeException. I agree that doing 
>>> both does not make sense, and in general doing (3) does not make sense if 
>>> the caller is not setup to properly check the interrupt state.
>> 
>> From a library writer perspective you should have zero knowledge of the 
>> caller and doing (3) makes perfect sense. Remember that you will only 
>> re-assert the interrupt() if you get the InterruptedException in the first 
>> place, which means that some other code already issued the initial 
>> interrupt().
>> 
>> Whether this code shoud be treated as general purpose library code is 
>> another matter.
>> 
>> Personally, in this case I think I'd use (2) and make interruption a failure 
>> mode.
> Ok. We're in agreement here. Igor, are you ok with this?
> 
> try {
>     ...
> } catch (InterruptedException e) {
>    throw new RuntimeException(e);
> }
> 
> thanks,
> 
> Chris
>> 
>> David
>> 
>>> Chris
>>> 
>>> 
>>> On 2/12/20 5:58 AM, David Holmes wrote:
>>>> Hi Chris,
>>>> 
>>>> I think you are overthinking this. :)
>>>> 
>>>> What you have observed is that the code that actually uses this method 
>>>> does not utilise interrupts, or expect them, so if you artifically inject 
>>>> one in this library method then you see things failing in unexpected ways. 
>>>> That also means that if the thread was interrupted by some other piece of 
>>>> logic then it would also fail in unexpected ways. That doesn't negate your 
>>>> choice to re-assert the interrupt state.
>>>> 
>>>> From a library writing perspective if you have a method that performs a 
>>>> blocking call that can throw InterruptedException then you generally have 
>>>> three choices:
>>>> 
>>>> 1. Throw InterruptedException yourself and pass the buck to your callers.
>>>> 2. Convert the InterruptedException to a more general failure exception - 
>>>> typically an unchecked RuntimeException - for which interruption is but 
>>>> one possible cause; or
>>>> 3. Catch the InterruptedException and allow the method to complete 
>>>> normally (i.e. not by throwing an exception) but re-assert the interrupt 
>>>> state so that a caller checking for interruption will still see that it 
>>>> occurred.
>>>> 
>>>> What you have below is a mix of #2 and #3 - you convert to a generic 
>>>> exception but also re-assert the interrupt state. That's a little unusual.
>>>> 
>>>> David
>>>> 
>>>> 
>>>> On 12/02/2020 6:16 pm, Chris Plummer wrote:
>>>>> Hi Igor,
>>>>> 
>>>>> I think it might be best to the interrupt() call out. I wanted to see 
>>>>> what would happen if we ever got an InterruptedException, so I added the 
>>>>> following to the start of Platform.shouldSAAttach():
>>>>> 
>>>>>          try {
>>>>>              throw new InterruptedException();
>>>>>          } catch (InterruptedException e) {
>>>>>              Thread.currentThread().interrupt();
>>>>>              throw new RuntimeException(e);
>>>>>          }
>>>>> 
>>>>> At the start of the test run, before any tests are actually run, I see 
>>>>> the following:
>>>>> 
>>>>> failed to get value for vm.hasSAandCanAttach
>>>>> java.lang.RuntimeException: java.lang.InterruptedException
>>>>>      at jdk.test.lib.Platform.shouldSAAttach(Platform.java:300)
>>>>>      at requires.VMProps.vmHasSAandCanAttach(VMProps.java:327)
>>>>>      at requires.VMProps$SafeMap.put(VMProps.java:69)
>>>>>      at requires.VMProps.call(VMProps.java:101)
>>>>>      at requires.VMProps.call(VMProps.java:57)
>>>>>      at 
>>>>> com.sun.javatest.regtest.agent.GetJDKProperties.run(GetJDKProperties.java:80)
>>>>>  
>>>>>      at 
>>>>> com.sun.javatest.regtest.agent.GetJDKProperties.main(GetJDKProperties.java:54)
>>>>>  
>>>>> Caused by: java.lang.InterruptedException
>>>>>      at jdk.test.lib.Platform.shouldSAAttach(Platform.java:297)
>>>>>      ... 6 more
>>>>> 
>>>>> This seems reasonable.
>>>>> 
>>>>> For each test that checks vm.hasSAandCanAttach I also see.
>>>>> 
>>>>> TEST RESULT: Error. Error evaluating expression: vm.hasSAandCanAttach: 
>>>>> java.lang.RuntimeException: java.lang.InterruptedException
>>>>> 
>>>>> This too seems reasonable.
>>>>> 
>>>>> For tests that don't check vm.hasSAandCanAttach, but instead make a 
>>>>> runtime check that calls Platform.shouldSAAttach(), the test fails with:
>>>>> 
>>>>> java.lang.IllegalThreadStateException: process hasn't exited
>>>>>      at java.base/java.lang.ProcessImpl.exitValue(ProcessImpl.java:500)
>>>>>      at jdk.test.lib.apps.LingeredApp.stopApp(LingeredApp.java:380)
>>>>>      at jdk.test.lib.apps.LingeredApp.stopApp(LingeredApp.java:433)
>>>>>      at ClhsdbAttach.main(ClhsdbAttach.java:77)
>>>>>      at 
>>>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
>>>>> Method)
>>>>>      at 
>>>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>>>  
>>>>>      at 
>>>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>>  
>>>>>      at java.base/java.lang.reflect.Method.invoke(Method.java:564)
>>>>>      at 
>>>>> com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
>>>>>  
>>>>>      at java.base/java.lang.Thread.run(Thread.java:832)
>>>>> 
>>>>> This is a confusing way to fail. The reason it fails this way is because 
>>>>> stopApp() first calls waitAppTerminiate(), which does the following:
>>>>> 
>>>>>      public void waitAppTerminate() {
>>>>>          // This code is modeled after tail end of 
>>>>> ProcessTools.getOutput().
>>>>>          try {
>>>>>              appProcess.waitFor();
>>>>>              outPumperThread.join();
>>>>>              errPumperThread.join();
>>>>>          } catch (InterruptedException e) {
>>>>>              Thread.currentThread().interrupt();
>>>>>              // pass
>>>>>          }
>>>>>      }
>>>>> 
>>>>> I added an e.printStackTrace() call and see the following:
>>>>> 
>>>>> java.lang.InterruptedException
>>>>>      at java.base/java.lang.Object.wait(Native Method)
>>>>>      at java.base/java.lang.Object.wait(Object.java:321)
>>>>>      at java.base/java.lang.ProcessImpl.waitFor(ProcessImpl.java:474)
>>>>>      at 
>>>>> jdk.test.lib.apps.LingeredApp.waitAppTerminate(LingeredApp.java:239)
>>>>>      at jdk.test.lib.apps.LingeredApp.stopApp(LingeredApp.java:380)
>>>>>      at jdk.test.lib.apps.LingeredApp.stopApp(LingeredApp.java:434)
>>>>> 
>>>>> So the earlier call to interrupt() is resulting in waitAppTerminate() not 
>>>>> actually waiting for exit. This then results in stopApp() getting 
>>>>> IllegalThreadStateException when calling Process.exitValue().
>>>>> 
>>>>> If I comment out the call to interrupt() in Platform.shouldSAAttach(), I 
>>>>> think the failure stack trace is much better:
>>>>> 
>>>>> java.lang.RuntimeException: Test ERROR java.lang.RuntimeException: 
>>>>> java.lang.InterruptedException
>>>>>      at ClhsdbAttach.main(ClhsdbAttach.java:75)
>>>>>      at 
>>>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
>>>>> Method)
>>>>>      at 
>>>>> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>>>  
>>>>>      at 
>>>>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>>  
>>>>>      at java.base/java.lang.reflect.Method.invoke(Method.java:564)
>>>>>      at 
>>>>> com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapper.java:127)
>>>>>  
>>>>>      at java.base/java.lang.Thread.run(Thread.java:832)
>>>>> Caused by: java.lang.RuntimeException: java.lang.InterruptedException
>>>>>      at jdk.test.lib.Platform.shouldSAAttach(Platform.java:300)
>>>>>      at ClhsdbLauncher.run(ClhsdbLauncher.java:199)
>>>>>      at ClhsdbAttach.main(ClhsdbAttach.java:71)
>>>>>      ... 6 more
>>>>> Caused by: java.lang.InterruptedException
>>>>>      at jdk.test.lib.Platform.shouldSAAttach(Platform.java:297)
>>>>>      ... 8 more
>>>>> 
>>>>> There's still a minor issue with rethrowing the RuntimeException 
>>>>> encapsulated inside another RuntimeException. That the fault of the test 
>>>>> which is catching all Exceptions and encapsulating them in a 
>>>>> RuntimeException, even if the Exceptions itself is already a 
>>>>> RuntimeException. It should add have a catch clause for RuntimeException, 
>>>>> and just rethrow it without encapulating it. All the Clhsdb tests seem to 
>>>>> do this, so that's about 20 places to fix. Probably not worth doing 
>>>>> unless some other cleanup is being done at the same time.
>>>>> 
>>>>> Chris
>>>>> 
>>>>> On 2/11/20 10:30 PM, Igor Ignatyev wrote:
>>>>>> I'd say yes, it's better to still call Thread::interrupt.
>>>>>> 
>>>>>> -- Igor
>>>>>> 
>>>>>>> On Feb 11, 2020, at 10:19 PM, Chris Plummer <chris.plum...@oracle.com 
>>>>>>> <mailto:chris.plum...@oracle.com>> wrote:
>>>>>>> 
>>>>>>> Ok. Should I still call interrupt()?
>>>>>>> 
>>>>>>> Chris
>>>>>>> 
>>>>>>> On 2/11/20 10:07 PM, Igor Ignatyev wrote:
>>>>>>>> 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 
>>>>>>>>> <mailto: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
>>>>>>>>>>>>>>>  
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 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>>
>>>>>>>>>>>>>>>>>  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
>>>>>>>>>>>>>>>>>>> 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>>
>>>>>>>>>>>>>>>>>>>>>  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
>>>>>>>>>>>>>>>>>>>>> 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

Reply via email to