--- fgms-0.9.14.orig/src/server/fg_server.cxx	2010-03-17 18:24:47.000000000 +0100
+++ fgms-0.9.14.bughunt/src/server/fg_server.cxx	2010-07-11 17:16:16.000000000 +0200
@@ -19,7 +19,7 @@
 //      Server for FlightGear
 //      (c) 2005-2010 Oliver Schroeder
 //      (c) 2006 Julien Pierru ( UpdateTracker() )
-//      (c) 2007 Anders Gidenstam ( LazyRelay )
+//      (c) 2007-2010 Anders Gidenstam ( LazyRelay )
 //
 //////////////////////////////////////////////////////////////////////
 
@@ -648,9 +648,7 @@
         Message += "' has left";
         CreateChatMessage (0, Message);
       }
-      mT_PlayerListIt P;
-      P = CurrentPlayer;
-      CurrentPlayer = m_PlayerList.erase (P);
+      CurrentPlayer = m_PlayerList.erase (CurrentPlayer);
       continue;
     }
     CurrentPlayer++;
@@ -731,7 +729,7 @@
   Point3D         SenderOrientation;
   Point3D         PlayerPosGeod;
   mT_PlayerListIt CurrentPlayer;
-  mT_PlayerListIt SendingPlayer;
+  mT_PlayerListIt SendingPlayer = m_PlayerList.end();
   mT_RelayListIt  CurrentRelay;
   mT_MessageIt    CurrentMessage;
   unsigned int    PktsForwarded = 0;
@@ -932,9 +930,7 @@
         Message += "' has left";
         CreateChatMessage (0, Message);
       }
-      mT_PlayerListIt P;
-      P = CurrentPlayer;
-      CurrentPlayer = m_PlayerList.erase (P);
+      CurrentPlayer = m_PlayerList.erase (CurrentPlayer);
       continue;
     }
     //////////////////////////////////////////////////
@@ -983,14 +979,11 @@
   //////////////////////////////////////////////////
   if (m_MessageList.size())
   {
-    mT_MessageIt P;
     CurrentMessage = m_MessageList.begin();
     while (CurrentMessage != m_MessageList.end())
     {
-      P = CurrentMessage;
-      delete[] P->Msg;
-      m_MessageList.erase (P);
-      CurrentMessage = m_MessageList.begin();
+      delete[] CurrentMessage->Msg;
+      CurrentMessage = m_MessageList.erase (CurrentMessage);
     }
   }
   //////////////////////////////////////////////////
@@ -1003,6 +996,12 @@
   //        a Relay
   //
   //////////////////////////////////////////////////
+  if (SendingPlayer == m_PlayerList.end()) {
+    // The sending player was not found in the player list.
+    // FIXME: This happens although it seems like it should be impossible.
+    cerr << "fgms: Sending player not found in m_PlayerList in HandlePacket()!" << endl;
+    return;
+  }
   bool UpdateInactive = Timestamp - 
     SendingPlayer->LastRelayedToInactive > UPDATE_INACTIVE_PERIOD;
   if (UpdateInactive)
