I got it.

Chris

On 6/20/18 11:03 AM, Gary Adams wrote:
I'll need a sponsor for the push.
Patch attached.

On 6/20/18, 1:48 PM, serguei.spit...@oracle.com wrote:
Hi Gary,

Looks great modulo the suggestion from Chris.

Thanks,
Serguei


On 6/20/18 10:45, Chris Plummer wrote:
Hi Gary,

Overall looks good. One minor formatting comment:

105 if ((mt.threadState < 1000) &&
106 agentStatus()) {
 107             passed = true;
 108         }


Lines 105 and 106 should be combined.

thanks

Chris

On 6/20/18 5:31 AM, Gary Adams wrote:
We do need to consider an early return for the case where
the redefine class or suspend thread operation have detected
an error.


Webrev:http://bussund0416.us.oracle.com/export/users/gradams/work/webrevs/6545967/webrev.01/


   80     public boolean agentMethod() {
   81         boolean passed = false;
   82         MyThread mt = new MyThread();
   83         try {
   84             mt.start();
   85             // check if we can can pop the thread.
86 // we can not do redefine/pop frame on run method.
87 while (!MyThread.resume.get());

   88             // sleep for some few secs to get redefined.
89 while (!isRedefined()) {
90 if (!agentStatus()) {
91 System.out.println("Failed to redefine class");
92 return passed;
93 }
94 Thread.sleep(100);
95 }
96 popThreadFrame(mt); // pop the frame.
97 resumeThread(mt); // resume the thread.
   98             mt.join();
   99             // wait till the other thread completes its execution.
100 System.out.println("Thread state after popping/redefining = "
101 + mt.threadState);
  102         } catch(Exception ie) {
  103             ie.printStackTrace();
  104         }
105 if ((mt.threadState < 1000) &&
106 agentStatus()) {

  107             passed = true;
  108         }
  109         return passed;
  110     }



On 6/19/18, 7:53 PM, Chris Plummer wrote:
Hi Gary,

The sp05t003 changes look fine. Serquei's question about hs203t003 leads me to ask what happens if the redefine never happens, possibly due to some error. Seems we are destined for a timeout then (not sure how long that will take), whereas the current implementation would report the failure after about 10 seconds.

thanks,

Chris

On 6/19/18 2:26 PM, serguei.spit...@oracle.com wrote:
Hi Gary,

The fix looks good in general.

One comment though:

http://cr.openjdk.java.net/~gadams/6545967/webrev.00/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/hotswap/HS203/hs203t003/hs203t003.java.frames.html

   80     public boolean  agentMethod() {
   81         boolean passed = false;
   82         MyThread mt = new MyThread();
   83                 try {
   84             mt.start();
   85             // check if we can can pop the thread.
   86             // we can not do redefine / pop frame on run method.
   87             while(!MyThread.resume.get());
   88             // sleep for some few secs to get redefined.
89 while(!isRedefined()) {
90 Thread.sleep(100);
91 }
92 popThreadFrame(mt); // pop the frame.
93 resumeThread(mt); // resume the thread.
   94             mt.join();
   95             // wait till the other thread completes its execution.    96             System.out.println(" Thread state after poping / redefining = "+mt.threadState);
   97         } catch(Exception ie) {
   98             ie.printStackTrace();
   99         }
  100         if ( ( mt.threadState < 1000 ) &&
  101                 ( redefineAttempted() && isRedefined()) &&
  102                 agentStatus() ) {
  103             passed = true;
  104         }
  105         return passed;
  106     }
  It seems, the two checks ( redefineAttempted() && isRedefined()) at L101 are not needed any more.
Now, there is no way out of the while loop at the line 89.

Thanks,
Serguei



On 6/19/18 11:42, Gary Adams wrote:
There are some rare race conditions that impact some jvmti tests that
suspend and resume threads. These tests were recently moved into
the open repos.

  Webrev: http://cr.openjdk.java.net/~gadams/6545967/webrev.00/

The fix in hs203t003 replaces a blind 10 second sleep, with a specific check to wait for a redefineClass to be performed, which takes place as part of callbackFieldAccess. This let's the rest of the operations be performed
at a known point in the test sequence.

The fix in sp05t003 moves the incrementing of the counters to after the suspend thread calls. The agentProc function is watching the counters to know when to continue processing and eventually resuming of the suspended threads.









Reply via email to