diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java b/xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java index f889600a78..4ae3f9e5ef 100644 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java +++ b/xmppserver/src/main/java/org/jivesoftware/openfire/SessionManager.java @@ -292,9 +292,7 @@ public synchronized void terminateDetached(LocalSession session) { Presence presence = new Presence(); presence.setType(Presence.Type.unavailable); presence.setFrom(session.getAddress()); - - // Broadcast asynchronously, to reduce the likelihood of the broadcast introducing a deadlock (OF-2921). - TaskEngine.getInstance().submit(() -> router.route(presence)); + router.route(presence); } session.getStreamManager().onClose(router, serverAddress); diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/session/ClientSessionTask.java b/xmppserver/src/main/java/org/jivesoftware/openfire/session/ClientSessionTask.java index 6daa64d554..8f8e171355 100644 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/session/ClientSessionTask.java +++ b/xmppserver/src/main/java/org/jivesoftware/openfire/session/ClientSessionTask.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 Jive Software, 2021-2023 Ignite Realtime Foundation. All rights reserved. + * Copyright (C) 2007-2009 Jive Software, 2021-2025 Ignite Realtime Foundation. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,7 +38,7 @@ */ public class ClientSessionTask extends RemoteSessionTask { - private static Logger logger = LoggerFactory.getLogger(ClientSessionTask.class); + private static final Logger logger = LoggerFactory.getLogger(ClientSessionTask.class); private JID address; private transient Session session; @@ -61,7 +61,7 @@ Session getSession() { public void run() { if (getSession() == null || getSession().isClosed()) { - logger.error("Session not found for JID: " + address); + logger.error("Unable to execute task for JID {}: {}", address, this, new IllegalStateException("Session not found for JID: " + address)); return; } super.run(); diff --git a/xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java b/xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java index db96980159..d2ec79dcba 100644 --- a/xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java +++ b/xmppserver/src/main/java/org/jivesoftware/openfire/spi/RoutingTableImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Jive Software, 2016-2024 Ignite Realtime Foundation. All rights reserved. + * Copyright (C) 2005-2008 Jive Software, 2016-2025 Ignite Realtime Foundation. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -414,7 +414,8 @@ private boolean routeToLocalDomain(JID jid, Packet packet) routed = remotePacketRouter .routePacket(clientRoute.getNodeID().toByteArray(), jid, packet); if (!routed) { - removeClientRoute(jid); // drop invalid client route + Log.warn("Dropping invalid client route for {}", jid); + removeClientRoute(jid); } } }