Index: opensim/src/Main.cs =================================================================== --- opensim/src/Main.cs (revision 73) +++ opensim/src/Main.cs (working copy) @@ -134,7 +134,7 @@ Console.WriteLine("Main.cs:MainServerListener() - Listening..."); while(true) { - + Thread.Sleep(1000); } } } Index: opensim/src/OpenSimClient.cs =================================================================== --- opensim/src/OpenSimClient.cs (revision 73) +++ opensim/src/OpenSimClient.cs (working copy) @@ -80,14 +80,16 @@ } public void InPacket(Packet NewPack) { - lock(PacketInbox) { + lock(this) { PacketInbox.Enqueue(NewPack); + Monitor.PulseAll(this); } } public void OutPacket(Packet NewPack) { - lock(PacketOutbox) { + lock(this) { PacketOutbox.Enqueue(NewPack); + Monitor.PulseAll(this); } } @@ -104,24 +106,17 @@ private void ClientLoop() { Console.WriteLine("OpenSimClient.cs:ClientLoop() - Entered loop"); - while(true) { - lock(PacketInbox) { - if(PacketInbox.Count>0) { + lock(this) { + while(true) { + Monitor.Wait(this); + while(PacketInbox.Count>0) { Packet InPack = (Packet)PacketInbox.Dequeue(); ProcessInPacket(InPack); - } else { - Thread.Sleep(100); // yes, it's redundant, but it helps! } - Monitor.Wait(PacketInbox); - } - lock(PacketOutbox) { - if(PacketOutbox.Count>0) { + while(PacketOutbox.Count>0) { Packet OutPack = (Packet)PacketOutbox.Dequeue(); ProcessOutPacket(OutPack); - } else { - Thread.Sleep(100); } - Monitor.Wait(PacketOutbox); } } }