Stack overflow error

I’'ve tested non-blocking mode and found next exception. Looks like this issue can occur in blocking mode too.

Exception in thread “pool-3-thread-1” java.lang.StackOverflowError

at sun.nio.ch.SocketDispatcher.write0(Native Method)

at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:33)

at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:104)

at sun.nio.ch.IOUtil.write(IOUtil.java:75)

at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:302)

at org.jivesoftware.wildfire.net.ServerTrafficCounter$WritableByteChannelWrapper.w rite(ServerTrafficCounter.java:304)

at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:333)

at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)

at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)

at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)

at org.jivesoftware.util.XMLWriter.flush(XMLWriter.java:190)

at org.jivesoftware.wildfire.net.XMLSocketWriter.flush(XMLSocketWriter.java:31)

at org.jivesoftware.wildfire.net.SocketConnection.deliver(SocketConnection.java:56 8)

at org.jivesoftware.wildfire.ClientSession.deliver(ClientSession.java:760)

at org.jivesoftware.wildfire.ClientSession.process(ClientSession.java:754)

at org.jivesoftware.wildfire.muc.spi.MUCRoleImpl.send(MUCRoleImpl.java:241)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.broadcastPresence(MUCRoomImpl.jav a:834)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.leaveRoom(MUCRoomImpl.java:643)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:477)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:133)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.processPacket(MultiUs erChatServerImpl.java:235)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.process(MultiUserChat ServerImpl.java:216)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.broadcastUnavailableFor DirectedPresences(PresenceUpdateHandler.java:435)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:110)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:153)

at org.jivesoftware.wildfire.PresenceRouter.handle(PresenceRouter.java:92)

at org.jivesoftware.wildfire.PresenceRouter.route(PresenceRouter.java:61)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:75)

at org.jivesoftware.wildfire.SessionManager.removeSession(SessionManager.java:1402 )

at org.jivesoftware.wildfire.SessionManager$ClientSessionListener.onConnectionClos e(SessionManager.java:1446)

at org.jivesoftware.wildfire.net.SocketConnection.notifyCloseListeners(SocketConne ction.java:637)

at org.jivesoftware.wildfire.net.SocketConnection.close(SocketConnection.java:453)

at org.jivesoftware.wildfire.net.SocketConnection.deliver(SocketConnection.java:58 0)

at org.jivesoftware.wildfire.ClientSession.deliver(ClientSession.java:760)

at org.jivesoftware.wildfire.ClientSession.process(ClientSession.java:754)

at org.jivesoftware.wildfire.muc.spi.MUCRoleImpl.send(MUCRoleImpl.java:241)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.broadcastPresence(MUCRoomImpl.jav a:834)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.leaveRoom(MUCRoomImpl.java:643)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:477)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:133)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.processPacket(MultiUs erChatServerImpl.java:235)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.process(MultiUserChat ServerImpl.java:216)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.broadcastUnavailableFor DirectedPresences(PresenceUpdateHandler.java:435)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:110)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:153)

at org.jivesoftware.wildfire.PresenceRouter.handle(PresenceRouter.java:92)

at org.jivesoftware.wildfire.PresenceRouter.route(PresenceRouter.java:61)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:75)

at org.jivesoftware.wildfire.SessionManager.removeSession(SessionManager.java:1402 )

at org.jivesoftware.wildfire.SessionManager$ClientSessionListener.onConnectionClos e(SessionManager.java:1446)

at org.jivesoftware.wildfire.net.SocketConnection.notifyCloseListeners(SocketConne ction.java:637)

at org.jivesoftware.wildfire.net.SocketConnection.close(SocketConnection.java:453)

at org.jivesoftware.wildfire.net.SocketConnection.deliver(SocketConnection.java:58 0)

at org.jivesoftware.wildfire.ClientSession.deliver(ClientSession.java:760)

at org.jivesoftware.wildfire.ClientSession.process(ClientSession.java:754)

at org.jivesoftware.wildfire.muc.spi.MUCRoleImpl.send(MUCRoleImpl.java:241)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.broadcastPresence(MUCRoomImpl.jav a:834)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.leaveRoom(MUCRoomImpl.java:643)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:477)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:133)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.processPacket(MultiUs erChatServerImpl.java:235)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.process(MultiUserChat ServerImpl.java:216)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.broadcastUnavailableFor DirectedPresences(PresenceUpdateHandler.java:435)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:110)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:153)

at org.jivesoftware.wildfire.PresenceRouter.handle(PresenceRouter.java:92)

at org.jivesoftware.wildfire.PresenceRouter.route(PresenceRouter.java:61)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:75)

at org.jivesoftware.wildfire.SessionManager.removeSession(SessionManager.java:1402 )

at org.jivesoftware.wildfire.SessionManager$ClientSessionListener.onConnectionClos e(SessionManager.java:1446)

at org.jivesoftware.wildfire.net.SocketConnection.notifyCloseListeners(SocketConne ction.java:637)

at org.jivesoftware.wildfire.net.SocketConnection.close(SocketConnection.java:453)

at org.jivesoftware.wildfire.net.SocketConnection.deliver(SocketConnection.java:58 0)

at org.jivesoftware.wildfire.ClientSession.deliver(ClientSession.java:760)

at org.jivesoftware.wildfire.ClientSession.process(ClientSession.java:754)

at org.jivesoftware.wildfire.muc.spi.MUCRoleImpl.send(MUCRoleImpl.java:241)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.broadcastPresence(MUCRoomImpl.jav a:834)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.leaveRoom(MUCRoomImpl.java:643)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:477)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:133)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.processPacket(MultiUs erChatServerImpl.java:235)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.process(MultiUserChat ServerImpl.java:216)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.broadcastUnavailableFor DirectedPresences(PresenceUpdateHandler.java:435)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:110)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:153)

at org.jivesoftware.wildfire.PresenceRouter.handle(PresenceRouter.java:92)

at org.jivesoftware.wildfire.PresenceRouter.route(PresenceRouter.java:61)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:75)

at org.jivesoftware.wildfire.SessionManager.removeSession(SessionManager.java:1402 )

at org.jivesoftware.wildfire.SessionManager$ClientSessionListener.onConnectionClos e(SessionManager.java:1446)

at org.jivesoftware.wildfire.net.SocketConnection.notifyCloseListeners(SocketConne ction.java:637)

at org.jivesoftware.wildfire.net.SocketConnection.close(SocketConnection.java:453)

at org.jivesoftware.wildfire.net.SocketConnection.deliver(SocketConnection.java:58 0)

at org.jivesoftware.wildfire.ClientSession.deliver(ClientSession.java:760)

at org.jivesoftware.wildfire.ClientSession.process(ClientSession.java:754)

at org.jivesoftware.wildfire.muc.spi.MUCRoleImpl.send(MUCRoleImpl.java:241)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.broadcastPresence(MUCRoomImpl.jav a:834)

at org.jivesoftware.wildfire.muc.spi.MUCRoomImpl.leaveRoom(MUCRoomImpl.java:643)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:477)

at org.jivesoftware.wildfire.muc.spi.MUCUserImpl.process(MUCUserImpl.java:133)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.processPacket(MultiUs erChatServerImpl.java:235)

at org.jivesoftware.wildfire.muc.spi.MultiUserChatServerImpl.process(MultiUserChat ServerImpl.java:216)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.broadcastUnavailableFor DirectedPresences(PresenceUpdateHandler.java:435)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:110)

at org.jivesoftware.wildfire.handler.PresenceUpdateHandler.process(PresenceUpdateH andler.java:153)

at org.jivesoftware.wildfire.PresenceRouter.handle(PresenceRouter.java:92)

at org.jivesoftware.wildfire.PresenceRouter.route(PresenceRouter.java:61)

at org.jivesoftware.wildfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:75)

at org.jivesoftware.wildfire.SessionManager.removeSession(SessionManager.java:1402 )

at org.jivesoftware.wildfire.SessionManager$ClientSessionListener.onConnectionClos e(SessionManager.java:1446)

at org.jivesoftware.wildfire.net.SocketConnection.notifyCloseListeners(SocketConne ction.java:637)

at org.jivesoftware.wildfire.net.SocketConnection.close(SocketConnectio.java:453)

at org.jivesoftware.wildfire.net.SocketConnection.deliver(SocketConnection.java:58 0)

and so on…

Hey devs, are you here??? I’‘ve spent a lot of time testing Wildfire and can say that you need to review the architecture, cause StackOverflowError is independent on stack size. When it happens server become very slow and all connections become disconnected. After that I’'m able to connect to server again.Specially you need to queue connection close event.

Hi Tim,

My guess is that there aren’'t many code contributors to this open source project yet. Just look at the Top Users collumn. See the vast differences in points? The number of devs who usually respond are not even a hand full. Like many open source contributors, I suppose they have other commitments too. In fact, those hand full of devs are mostly Jive employees or somehow related to Jive. Right now Jive is preparing for the release of Wildfire 3.1.

The missing thing here I guess (again) is that not many enthusiasts with the correct skills have yet to discover the project and join the team. You seems to me like having the right criteria. As enthusiastic as you might be, I’'d strongly recommend you to contact Matt to offer yourself as a dev. AFAIK, you would have to sign the contributor agreement.

*p/s: Maybe Matt will have to create a link on the site for donations, or better still, sponsor the external devs *

Hi aznidin,

JS.org searches as far as I know still new developers, so if we want to be good head-hunters we should always provide a link to http://www.jivesoftware.com/company/jobs.jsp (:

Reporting bugs is more a QA topic, but also a QA Engineer is available there.

LG

Hi LG,

You’‘re right! Sorry. I missed that link … although that’‘s not exactly what I meant. Well, Tim could choose either way, or neither. I’'m just curious, do you think a guy living somewhere across the globe is eligible to apply as well?

Anyway, what matters now is to have someone help Tim out.

Hi aznidin,

do you think a guy living somewhere across the globe is eligible to apply as well? is completely off-topic. I assume that one should spend 7 - 12 months in portland because remote coding in another country and far away from the core team usually leads to bad software and a lot of problems.

An onClose() notification loop is really bad. I did code something similar using Javascript, it will deadlock every browser so one must use the Task Manager or kill -9 to kill it.

LG