Maybe bug with force logout in 2.17.3 not present in 2.16.0
Posted: 07 Oct 2021, 14:45
Hi, I just downloaded sfs v2.17.3 along with the c# client api v1.7.16 and testing in Windows I have a weird bug that cannot reproduce in my linux environment running 2.16.0.
First login goes well no problem at all, then if I stop the client and log in again, the server is configured to force logout so the current session is disconnected and a new one is created, then I get a npe in this line of my code
@Override
public void handleClientRequest(User user, ISFSObject data) {
extension = (ZoneExtension) getParentExtension();
this.user = user;
this.data = data;
userId = user.getVariable("user_id").getDoubleValue().longValue(); // npe here.
I'm testing in a local environment (windows) with only one user and my only guess is that somehow sfs is trying to access the destroyed version of this user, because user_id does exist, I can see it in the admin and we don't have this problem in other instances running 2.16.0.
This is the log.
11:29:52,807 INFO [SocketReader] sessions.DefaultSessionManager - Session created: { Id: 5, Type: DEFAULT, Logged: No, IP: 0:0:0:0:0:0:0:1:60675 } on Server port: 9933 <---> 60675
11:29:52,944 INFO [SFSWorker:Ext:4] zone.ZoneExtension - Login Type: 3
11:29:53,418 INFO [SFSWorker:Ext:4] scala.DefLI - User already logged in. Disconnecting previous instance : ( User Name: guest196, Id: 3, Priv: 0, Sess: 0:0:0:0:0:0:0:1:56688 )
11:29:53,419 INFO [SFSWorker:Ext:4] managers.SFSRoomManager - Room removed: { Zone: Crypto_Game }, [ Room: chat_room, Id: 3, Group: default, isGame: false ], Duration: 53113
11:29:53,428 INFO [SFSWorker:Ext:4] api.SFSApi - User disconnected: { Zone: Crypto_Game }, ( User Name: guest196, Id: 3, Priv: 0, Sess: 0:0:0:0:0:0:0:1:56688 ) , SessionLen: 53722, Type: WindowsEditor:1.0.2
11:29:53,428 DEBUG [SFSWorker:Ext:3] zone.ZoneExtension - OnUserDisconnectHandler START
11:29:53,430 DEBUG [SFSWorker:Ext:3] zone.ZoneExtension - OnUserDisconnectHandler END
11:29:53,430 DEBUG [pool-1-thread-4] zone.ZoneExtension - ExecuteUpdateRunnable INIT
11:29:53,914 DEBUG [pool-1-thread-4] zone.ZoneExtension - ExecuteUpdateRunnable END
11:29:54,963 INFO [Scheduler1-thread-1] sessions.DefaultSessionManager - Session removed: { Id: 4, Type: DEFAULT, Logged: No, IP: 0:0:0:0:0:0:0:1:56688 }
11:29:55,430 INFO [pool-1-thread-2] api.SFSApi - User login: { Zone: Crypto_Game }, ( User Name: guest196, Id: 4, Priv: 0, Sess: 0:0:0:0:0:0:0:1:60675 ) , Type: WindowsEditor:1.0.2
11:29:55,485 ERROR [SFSWorker:Ext:1] v290.ExtensionReqController - java.lang.NullPointerException:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Exception: java.lang.NullPointerException
Message: *** Null ***
Description: Error while handling client request in extension: { Ext: CryptoGameExtension, Type: JAVA, Lev: ZONE, { Zone: Crypto_Game }, {} }
Extension Cmd: user.myAvatars
+--- --- ---+
Stack Trace:
+--- --- ---+
com.hackembostudios.crypto_game.zone.handlers.UserHandler.handleClientRequest(UserHandler.java:48)
com.smartfoxserver.v2.extensions.SFSExtension.handleClientRequest(SFSExtension.java:208)
com.smartfoxserver.v2.controllers.v290.ExtensionReqController.processRequest(ExtensionReqController.java:174)
com.smartfoxserver.v2.controllers.v290.ExtensionReqController$1.run(ExtensionReqController.java:68)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
First login goes well no problem at all, then if I stop the client and log in again, the server is configured to force logout so the current session is disconnected and a new one is created, then I get a npe in this line of my code
@Override
public void handleClientRequest(User user, ISFSObject data) {
extension = (ZoneExtension) getParentExtension();
this.user = user;
this.data = data;
userId = user.getVariable("user_id").getDoubleValue().longValue(); // npe here.
I'm testing in a local environment (windows) with only one user and my only guess is that somehow sfs is trying to access the destroyed version of this user, because user_id does exist, I can see it in the admin and we don't have this problem in other instances running 2.16.0.
This is the log.
11:29:52,807 INFO [SocketReader] sessions.DefaultSessionManager - Session created: { Id: 5, Type: DEFAULT, Logged: No, IP: 0:0:0:0:0:0:0:1:60675 } on Server port: 9933 <---> 60675
11:29:52,944 INFO [SFSWorker:Ext:4] zone.ZoneExtension - Login Type: 3
11:29:53,418 INFO [SFSWorker:Ext:4] scala.DefLI - User already logged in. Disconnecting previous instance : ( User Name: guest196, Id: 3, Priv: 0, Sess: 0:0:0:0:0:0:0:1:56688 )
11:29:53,419 INFO [SFSWorker:Ext:4] managers.SFSRoomManager - Room removed: { Zone: Crypto_Game }, [ Room: chat_room, Id: 3, Group: default, isGame: false ], Duration: 53113
11:29:53,428 INFO [SFSWorker:Ext:4] api.SFSApi - User disconnected: { Zone: Crypto_Game }, ( User Name: guest196, Id: 3, Priv: 0, Sess: 0:0:0:0:0:0:0:1:56688 ) , SessionLen: 53722, Type: WindowsEditor:1.0.2
11:29:53,428 DEBUG [SFSWorker:Ext:3] zone.ZoneExtension - OnUserDisconnectHandler START
11:29:53,430 DEBUG [SFSWorker:Ext:3] zone.ZoneExtension - OnUserDisconnectHandler END
11:29:53,430 DEBUG [pool-1-thread-4] zone.ZoneExtension - ExecuteUpdateRunnable INIT
11:29:53,914 DEBUG [pool-1-thread-4] zone.ZoneExtension - ExecuteUpdateRunnable END
11:29:54,963 INFO [Scheduler1-thread-1] sessions.DefaultSessionManager - Session removed: { Id: 4, Type: DEFAULT, Logged: No, IP: 0:0:0:0:0:0:0:1:56688 }
11:29:55,430 INFO [pool-1-thread-2] api.SFSApi - User login: { Zone: Crypto_Game }, ( User Name: guest196, Id: 4, Priv: 0, Sess: 0:0:0:0:0:0:0:1:60675 ) , Type: WindowsEditor:1.0.2
11:29:55,485 ERROR [SFSWorker:Ext:1] v290.ExtensionReqController - java.lang.NullPointerException:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Exception: java.lang.NullPointerException
Message: *** Null ***
Description: Error while handling client request in extension: { Ext: CryptoGameExtension, Type: JAVA, Lev: ZONE, { Zone: Crypto_Game }, {} }
Extension Cmd: user.myAvatars
+--- --- ---+
Stack Trace:
+--- --- ---+
com.hackembostudios.crypto_game.zone.handlers.UserHandler.handleClientRequest(UserHandler.java:48)
com.smartfoxserver.v2.extensions.SFSExtension.handleClientRequest(SFSExtension.java:208)
com.smartfoxserver.v2.controllers.v290.ExtensionReqController.processRequest(ExtensionReqController.java:174)
com.smartfoxserver.v2.controllers.v290.ExtensionReqController$1.run(ExtensionReqController.java:68)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::