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

JDI: ConcurrentModificationException in VirtualMachineImpl.allClasses()

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 1.4.0
    • 1.3.0, 1.4.0
    • core-svc
    • beta2
    • generic
    • generic
    • Not verified



      Name: tb29552 Date: 01/19/2001


      /*

      If a debugger calls com.sun.tools.jdi.VirtualMachineImpl.allClasses()
      while the debugee is actively running (and causing more classes to
      be loaded) you will sometimes get:

      Exception in thread "main" java.util.ConcurrentModificationException
              at java.util.TreeMap$Iterator.next(TreeMap.java:1020)
              at java.util.AbstractCollection.toArray(AbstractCollection.java:173)
              at java.util.ArrayList.<init>(ArrayList.java:126)
              at
           com.sun.tools.jdi.VirtualMachineImpl.allClasses(VirtualMachineImpl.java:245)
              at ClassesByName2.runTests(ClassesByName2.java:55)
              at JDIScaffold.startTests(JDIScaffold.java:185)
              at ClassesByName2.main(ClassesByName2.java:46)


      */

      /**
       * @test @(#)ClassesByName2.java 1.1 01/01/19
       * @bug 4406439
       * @author Tim Bell (based on ClassesByName by Robert Field)
       *
       * @run build JDIScaffold VMConnection
       * @run build ClassesByName2
       *
       * @summary ClassesByName2 verifies that all the classes in the
       * loaded class list can be found with classesByName..
       *
       * @run main/othervm ClassesByName2 ClassesByName2Debugee
       */
      import com.sun.jdi.*;
      import com.sun.jdi.event.*;
      import com.sun.jdi.request.*;

      import java.util.List;
      import java.util.Iterator;

      class ClassesByName2Debugee {
          private static final String name = "ClassesByName2Debugee: ";
          public static void main(String args[]) {
      /*
      * Do something that will cause a lot
      * more classes to be loaded...
      */
      System.out.print (name);
      System.out.println(" starting...");
      java.awt.Toolkit.getDefaultToolkit();
      System.out.print (name);
      System.out.println(" finished...");
          }
      }

      public class ClassesByName2 extends JDIScaffold {
          final String[] args;

          ClassesByName2(String args[]) throws Exception {
              super();
              this.args = args;
          }

          public static void main(String args[]) throws Exception {
              new ClassesByName2(args).startTests();
          }

          protected void runTests() throws Exception {
              connect(args);
              waitForVMStart();

      vm().resume();

              List all = vm().allClasses();
              for (Iterator it = all.iterator(); it.hasNext(); ) {
                  ReferenceType cls = (ReferenceType)it.next();
                  String name = cls.name();
                  List found = vm().classesByName(name);
                  if (found.contains(cls)) {
                      System.out.println("Found class: " + name);
                  } else {
                      System.out.println("CLASS NOT FOUND: " + name);
                      throw new Exception("CLASS NOT FOUND (by classesByName): " +
                                          name);
                  }
              }

              // Allow application to complete
              resumeToVMDeath();
          }
      }

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

            tbell Tim Bell
            tbell Tim Bell
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: