Uploaded image for project: 'JBoss Modules'
  1. JBoss Modules
  2. MODULES-195

Infinite loop in ModuleLoader.iterateModules()

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 1.3.4.Final, 1.4.0.Beta1
    • 1.4.0.Beta1
    • Core
    • None
    • Hide
          @Test
          public void testIterateModules() throws Exception {
              IterableModuleFinder fakeFinder = new IterableModuleFinder() {
                  private ModuleIdentifier[] modules = { ModuleIdentifier.create("a"), ModuleIdentifier.create("b")};
      
                  @Override
                  public Iterator<ModuleIdentifier> iterateModules(ModuleIdentifier baseIdentifier, boolean recursive) {
                      return new Iterator<ModuleIdentifier>() {
                          private int pos = 0;
      
                          @Override
                          public boolean hasNext() {
                              return pos < modules.length;
                          }
      
                          @Override
                          public ModuleIdentifier next() {
                              return modules[pos++];
                          }
      
                          @Override
                          public void remove() {
                              throw new UnsupportedOperationException();
                          }
                      };
                  }
      
                  @Override
                  public ModuleSpec findModule(ModuleIdentifier identifier, ModuleLoader delegateLoader)
                      throws ModuleLoadException {
                      for (ModuleIdentifier m : modules) {
                          if (m.equals(identifier)) {
                              return ModuleSpec.build(m).create();
                          }
                      }
                      return null;
                  }
              };
      
              ModuleLoader loader = new ModuleLoader(new ModuleFinder[]{fakeFinder});
      
              Iterator<ModuleIdentifier> it = loader.iterateModules(null, true);
              int count = 0;
              while (it.hasNext()) {
                  it.next();
                  count++;
              }
      
              Assert.assertEquals(2, count);
          }
      

      The above test case will loop indefinitely on "it.next()" when counting the number of modules in the finder.

      Show
      @Test public void testIterateModules() throws Exception { IterableModuleFinder fakeFinder = new IterableModuleFinder() { private ModuleIdentifier[] modules = { ModuleIdentifier.create( "a" ), ModuleIdentifier.create( "b" )}; @Override public Iterator<ModuleIdentifier> iterateModules(ModuleIdentifier baseIdentifier, boolean recursive) { return new Iterator<ModuleIdentifier>() { private int pos = 0; @Override public boolean hasNext() { return pos < modules.length; } @Override public ModuleIdentifier next() { return modules[pos++]; } @Override public void remove() { throw new UnsupportedOperationException(); } }; } @Override public ModuleSpec findModule(ModuleIdentifier identifier, ModuleLoader delegateLoader) throws ModuleLoadException { for (ModuleIdentifier m : modules) { if (m.equals(identifier)) { return ModuleSpec.build(m).create(); } } return null ; } }; ModuleLoader loader = new ModuleLoader( new ModuleFinder[]{fakeFinder}); Iterator<ModuleIdentifier> it = loader.iterateModules( null , true ); int count = 0; while (it.hasNext()) { it.next(); count++; } Assert.assertEquals(2, count); } The above test case will loop indefinitely on "it.next()" when counting the number of modules in the finder.

    Description

      The iterator returned from ModuleLoader.iterateModules() loops infinitely when the nested IterableModuleFinder contains some elements.

      Attachments

        Activity

          People

            dlloyd@redhat.com David Lloyd
            rhn-engineering-lkrejci Lukas Krejci
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: