protected void advanceInitializers(IOFSwitchExt sw) { CopyOnWriteArrayList<IOFInitializerListener> initializers = initializerMap.get(sw); // Remove first initializer if it exists Iterator<IOFInitializerListener> it = initializers.iterator(); if (it.hasNext()) { IOFInitializerListener initializer = it.next(); initializers.remove(initializer); log.debug("Remaining initializers for switch {}: {}", sw, initializers); } if (it.hasNext()) { IOFInitializerListener initializer = it.next(); queueInitializer(sw, initializer); } else { /** * Must synchronize here to ensure we don't transition into active while simultaneously being * disconnected. */ synchronized (sw) { if (!OFSwitchState.DISCONNECTED.equals(sw.getState())) { sw.transitionToState(OFSwitchState.ACTIVE); // Add switch to active list addActiveSwitch(sw); } initializerMap.remove(sw); } } }
/** Disconnect the switch from Beacon */ protected void disconnectSwitch(SelectionKey key, IOFSwitchExt sw) { /** * Must synchronize here to ensure we don't transition into active while simultaneously being * disconnected. */ synchronized (sw) { key.cancel(); OFStream stream = (OFStream) sw.getInputStream(); stream.getIOLoop().removeStream(stream); removeSwitch(sw); try { sw.getSocketChannel().socket().close(); } catch (IOException e1) { } this.initializerMap.remove(sw); if (!OFSwitchState.DISCONNECTED.equals(sw.getState())) { sw.transitionToState(OFSwitchState.DISCONNECTED); } log.info("Switch disconnected {}", sw); } }