public void run() {
DelayedExecutor executor = new DelayedExecutor(exchange.getIoThread());
final ThreadSetupAction.Handle handle = threadSetupAction.setup(ServletUpgradeListener.this.exchange);
try {
//run the upgrade in the worker thread
instance.getInstance().init(new WebConnectionImpl(channel, ServletUpgradeListener.this.exchange.getConnection().getBufferPool(), executor));
} finally {
try {
handle.tearDown();
} finally {
executor.openGate();