/**
   * Callback when a {@link SettingSpecifierProvider} has been un-registered.
   *
   * @param config the configuration object
   * @param properties the service properties
   */
  public void onUnbind(SettingSpecifierProvider provider, Map<String, ?> properties) {
    if (provider == null) {
      // gemini blueprint calls this when availability="optional" and there are no services
      return;
    }
    log.debug("Unbind called on {} with props {}", provider, properties);
    final String pid = provider.getSettingUID();

    synchronized (factories) {
      FactoryHelper helper = factories.get(pid);
      if (helper != null) {
        helper.removeProvider(provider);
        return;
      }
    }

    synchronized (providers) {
      providers.remove(pid);
    }
  }