diff options
author | Justin Clarke Casey | 2008-06-03 20:27:52 +0000 |
---|---|---|
committer | Justin Clarke Casey | 2008-06-03 20:27:52 +0000 |
commit | a9878401919a9946e0b2d679a8590ae13539b11d (patch) | |
tree | aeb672f18887b26ada22b0cb9f0ffd02340f839a /OpenSim | |
parent | * experimental: archive out and reload textures within a prim's inventory (diff) | |
download | opensim-SC-a9878401919a9946e0b2d679a8590ae13539b11d.zip opensim-SC-a9878401919a9946e0b2d679a8590ae13539b11d.tar.gz opensim-SC-a9878401919a9946e0b2d679a8590ae13539b11d.tar.bz2 opensim-SC-a9878401919a9946e0b2d679a8590ae13539b11d.tar.xz |
* Stop the crash to bash of the entire region server when a client thread fails by catching the exception in AuthUser() instead of letting it propogate out of the thread
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 0ef7f26..d9fefb4 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -688,34 +688,48 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
688 | m_scene.AddNewClient(this, true); | 688 | m_scene.AddNewClient(this, true); |
689 | } | 689 | } |
690 | 690 | ||
691 | /// <summary> | ||
692 | /// Authorize an incoming user session. This method lies at the base of the entire client thread. | ||
693 | /// </summary> | ||
691 | protected virtual void AuthUser() | 694 | protected virtual void AuthUser() |
692 | { | 695 | { |
693 | // AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(m_cirpack.m_circuitCode.m_sessionId, m_cirpack.m_circuitCode.ID, m_cirpack.m_circuitCode.Code); | 696 | try |
694 | AuthenticateResponse sessionInfo = | ||
695 | m_authenticateSessionsHandler.AuthenticateSession(m_sessionId, m_agentId, | ||
696 | m_circuitCode); | ||
697 | if (!sessionInfo.Authorised) | ||
698 | { | ||
699 | //session/circuit not authorised | ||
700 | m_log.Info("[CLIENT]: New user request denied to " + m_userEndPoint.ToString()); | ||
701 | m_packetQueue.Close(); | ||
702 | m_clientThread.Abort(); | ||
703 | } | ||
704 | else | ||
705 | { | 697 | { |
706 | m_log.Info("[CLIENT]: Got authenticated connection from " + m_userEndPoint.ToString()); | 698 | // AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(m_cirpack.m_circuitCode.m_sessionId, m_cirpack.m_circuitCode.ID, m_cirpack.m_circuitCode.Code); |
707 | //session is authorised | 699 | AuthenticateResponse sessionInfo = |
708 | m_firstName = sessionInfo.LoginInfo.First; | 700 | m_authenticateSessionsHandler.AuthenticateSession(m_sessionId, m_agentId, |
709 | m_lastName = sessionInfo.LoginInfo.Last; | 701 | m_circuitCode); |
710 | 702 | if (!sessionInfo.Authorised) | |
711 | if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero) | ||
712 | { | 703 | { |
713 | m_secureSessionId = sessionInfo.LoginInfo.SecureSession; | 704 | //session/circuit not authorised |
705 | m_log.Info("[CLIENT]: New user request denied to " + m_userEndPoint.ToString()); | ||
706 | m_packetQueue.Close(); | ||
707 | m_clientThread.Abort(); | ||
714 | } | 708 | } |
715 | // This sets up all the timers | 709 | else |
716 | InitNewClient(); | 710 | { |
711 | m_log.Info("[CLIENT]: Got authenticated connection from " + m_userEndPoint.ToString()); | ||
712 | //session is authorised | ||
713 | m_firstName = sessionInfo.LoginInfo.First; | ||
714 | m_lastName = sessionInfo.LoginInfo.Last; | ||
715 | |||
716 | if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero) | ||
717 | { | ||
718 | m_secureSessionId = sessionInfo.LoginInfo.SecureSession; | ||
719 | } | ||
720 | // This sets up all the timers | ||
721 | InitNewClient(); | ||
717 | 722 | ||
718 | ClientLoop(); | 723 | ClientLoop(); |
724 | } | ||
725 | } | ||
726 | catch (Exception e) | ||
727 | { | ||
728 | // Don't let a failure in an individual client thread crash the whole sim. | ||
729 | // FIXME: possibly more sophisticated cleanup since leaving client resources around will | ||
730 | // probably cause long term instability. I think this is still better than bring down the whole | ||
731 | // region | ||
732 | m_log.ErrorFormat("[CLIENT]: Client thread for {0} {1} crashed. Exception {2}", Name, AgentId, e); | ||
719 | } | 733 | } |
720 | } | 734 | } |
721 | 735 | ||