Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4291795

JDI: Enabled request accepts suspend policies with no effect

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 1.4.0
    • 1.3.0
    • core-svc
    • beta
    • generic
    • generic
    • Not verified



      Name: rrC79099 Date: 11/16/99


      The setSuspendPolicy(int) method in EventRequest when set after
      enabling a
      request has no effect. The API does not state whether suspend
      policy has to be set before or after enabling the request.
      When suspend policy is set after enabling a request it does not throw
      any
      execption also it does not work as expected.
      Testing done in WinNT(JDK1.3.0-N build).

      Steps to reporduce the error:
      -----------------------------
      1. Set the path to latest JDK(Kestrel).
      2. Set classpath to <jdk>/lib/tools.jar
      2. Compile all the attached files.
      3. First start the Target VM with the command
      java -Xdebug -Xnoagent
      -Xrunjdwp:transport=dt_socket,server=y,suspend=y,
      address=5670 SampleTest
      4. Start the debugger with the command
      java SuspendTest
      5. Supend policy SUSPEND_EVENT_THREAD set before enabling the request
      gives
      the following output:
      -------
      reference1 instance of ThreadTest(name='first', id=71)status is 1true
      reference2 instance of ThreadTest(name='second', id=73)status is
      -1false
      reference3 instance of java.lang.Thread(name='Thread-2', id=72)status
      is -1false
      -------
      Supend policy SUSPEND_EVENT_THREAD set after enabling the request gives

      the following output:
      -------
      reference1 instance of ThreadTest(name='first', id=71)status is 1true
      reference2 instance of ThreadTest(name='second', id=73)status is -1true

      reference3 instance of java.lang.Thread(name='Thread-2', id=72)status
      is -1true
      -------
      6. Output for testing by setting SUSPEND_ALL,SUSPEND_EVENT_THREAD
      ,SUSPEND_NONE
      individually before and after enabling request are in suspend.html.


      Attachments:
      ------------
      1. JDIScaffold.java
      2. VMConnection.java
      3. SuspendTest.java
      4. SampleTest.java - Target application
      5. ThreadTest.java
      6. suspend.html
      *************************************************

      import java.util.*;
      import com.sun.jdi.*;
      import com.sun.jdi.event.*;
      import com.sun.jdi.request.*;

      public class SuspendTest extends JDIScaffold {

        final String[] args;
        ReferenceType referenceType;
        ThreadReference reference1, reference2, reference3;
        EventRequestManager requestManager;

        public static void main(String args[]) throws Exception {
            new SuspendTest(args).startTests();
        }
        public SuspendTest(String args[]) {
         super();
         this.args = args;
        }
        protected void runTests() throws Exception {
         connect(args);
         waitForVMStart();
         requestManager = vm().eventRequestManager();
         ReferenceType referenceType =
      resumeToPrepareOf("ThreadTest").referenceType();

         BreakpointEvent breakEvent = resumeTo("ThreadTest","run","()V");
         List allThreads = vm().allThreads();

         for(int i=0;i<allThreads.size();i++) {
          ThreadReference thread = (ThreadReference)allThreads.get(i);
           if( thread.name().equals("first")) {
            reference1 = thread;
           } else if( thread.name().equals("second")) {
            reference2 = thread;
           } else if( thread.name().equals("Thread-2") ||
      thread.name().equals("main")) {
            reference3 = thread;
           }
         }
         List locs = referenceType.locationsOfLine(10);
         if (locs.size() == 0) {
          throw new IllegalArgumentException("Bad line number");
         } else if (locs.size() > 1) {
          throw new IllegalArgumentException("Line number has multiple
      locations");
         }
         Location location = (Location)locs.get(0);
         BreakpointRequest request =
      requestManager.createBreakpointRequest(location);
         request.setSuspendPolicy(request.SUSPEND_EVENT_THREAD);
         request.addThreadFilter(reference1);
         request.enable();
         //request.setSuspendPolicy(request.SUSPEND_EVENT_THREAD);
         BreakpointEvent event = null;
         for(int i=0;i<100;i++) {
          event = (BreakpointEvent)waitForRequestedEvent(request);
          System.out.println("reference1 " + reference1 + "status is " +
      reference1.status()+ reference1.isSuspended());
          System.out.println("reference2 " + reference2+ "status is " +
      reference2.status()+ reference2.isSuspended());
          System.out.println("reference3 " + reference3+ "status is " +
      reference3.status()+ reference3.isSuspended());

         }

        }
      }
      *************************************************
      public class SampleTest {
      static ThreadTest firstthread, secondthread;

        public static void main(String args[]) {
         SampleTest sampletest = new SampleTest();
         for(int i=0;i<10;i++) {
          sampletest.testMethod();
         }
         firstthread = new ThreadTest();
         firstthread.setName("first");
         secondthread = new ThreadTest();
         secondthread.setName("second");
         sampletest.sampleMethod();
        }

        public void testMethod() {
         System.out.println(" test message line");
        }

        public void sampleMethod() {
         firstthread.start();
         secondthread.start();
         System.out.println("started both threads");
        }


      }
      *************************************************
      public class ThreadTest extends Thread {

        public ThreadTest() {

        }
        public void run() {

         while(true) {
          System.out.println(" In thread " + currentThread());
         }
        }

      }
      *************************************************


      ======================================================================

            rfield Robert Field (Inactive)
            duke J. Duke
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: