Hi,
I'm using Whack & Tinder to create an external component and have discovered a race condition on initial startup.
It appears that the packet processing executor pool is actually started before the AbstractComponent's 'preComponentStart()' method is called.
I've tracked this back to here:
/** * Initialize the abstract component. * * @see org.xmpp.component.Component#initialize(org.xmpp.packet.JID, * org.xmpp.component.ComponentManager) */ publicfinalvoid initialize(final JID jid, final ComponentManager componentManager) throws ComponentException { compMan = componentManager; this.jid = jid; // start the executor service. startExecutor(); }
I'm thinking that this should simply call 'start()', which would in turn start the executor; here:
/** * Default implementation of the start() method of the {@link Component} * interface. Unless overridden, this method doesn't do anything. We get * called once for each host that we connect to, so we have to take care to * avoid double initialization. */ publicvoid start() { preComponentStart(); // reset the 'last activity' timestamp. lastStartMillis = System.currentTimeMillis(); // start the executor service. startExecutor(); postComponentStart(); }
Any thoughts? Possible to include with the next release?
Thanks,
DD