Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-341

Intermittent exception during Felix shutdown

    XMLWordPrintableJSON

Details

    Description

      One of my testcases intermittently throws an exception during shutdown. I have managed to recreate the exception under a debugger, and it shows two threads trying to unregister the same service. The test fails only when declarative services are used. I am using Felix 1.0.0 framework and the latest snapshot of SCR. The test uses multiple versions of a bundle, but I am not sure if that has anything to do with the exception.

      The exception thrown is:

      — Exception with component : Unexpected problem executing task —
      java.lang.IllegalStateException: Service already unregistered.
      at org.apache.felix.framework.ServiceRegistrationImpl.unregister (ServiceRegistrationImpl.java:105)
      at org.apache.felix.scr.AbstractComponentManager.unregisterComponentService(AbstractComponentManager.java:503)
      at org.apache.felix.scr.AbstractComponentManager.deactivateInternal (AbstractComponentManager.java:369)
      at org.apache.felix.scr.AbstractComponentManager.access$200(AbstractComponentManager.java:55)
      at org.apache.felix.scr.AbstractComponentManager$3.run(AbstractComponentManager.java :176)
      at org.apache.felix.scr.ComponentActorThread.run(ComponentActorThread.java:81)

      Here is the stack trace of the two threads under the debugger (both are using the same object):

      Thread [FelixStartLevel] (Suspended (breakpoint at line 97 in ServiceRegistrationImpl))
      ServiceRegistrationImpl.unregister() line: 97
      ServiceRegistry.unregisterServices (Bundle) line: 119
      Felix._stopBundle(FelixBundle, boolean) line: 1946
      Felix.stopBundle(FelixBundle, boolean) line: 1866
      Felix.setFrameworkStartLevel (int) line: 1080
      StartLevelImpl.run() line: 258
      Thread.run() line: 803
      Thread [SCR Component Actor] (Suspended (breakpoint at line 97 in ServiceRegistrationImpl))
      ServiceRegistrationImpl.unregister() line: 97
      ImmediateComponentManager(AbstractComponentManager).unregisterComponentService() line: 503
      ImmediateComponentManager(AbstractComponentManager).deactivateInternal() line: 369
      AbstractComponentManager.access$200(AbstractComponentManager) line: 55
      AbstractComponentManager$3.run() line: 176
      ComponentActorThread.run() line: 81

      The exception thrown is the IllegalStateException from
      public void unregister()
      {
      if (m_svcObj != null)

      { m_registry.unregisterService(m_bundle, this); m_svcObj = null; m_factory = null; }

      else

      { throw new IllegalStateException("Service already unregistered."); }

      }

      Attachments

        Activity

          People

            fmeschbe Felix Meschberger
            rsivaram Rajini Sivaram
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: