diff --git a/osu.Game/Online/Chat/Message.cs b/osu.Game/Online/Chat/Message.cs
index 4c86c963b7..8ea3ca0fc7 100644
--- a/osu.Game/Online/Chat/Message.cs
+++ b/osu.Game/Online/Chat/Message.cs
@@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
+using System.Threading;
using Newtonsoft.Json;
using osu.Game.Online.API.Requests.Responses;
@@ -59,9 +60,14 @@ namespace osu.Game.Online.Chat
/// The s' and s are according to
public List Links;
+ private static long constructionOrderStatic;
+ private readonly long constructionOrder;
+
public Message(long? id)
{
Id = id;
+
+ constructionOrder = Interlocked.Increment(ref constructionOrderStatic);
}
public int CompareTo(Message other)
@@ -69,7 +75,13 @@ namespace osu.Game.Online.Chat
if (Id.HasValue && other.Id.HasValue)
return Id.Value.CompareTo(other.Id.Value);
- return Timestamp.CompareTo(other.Timestamp);
+ int timestampComparison = Timestamp.CompareTo(other.Timestamp);
+
+ if (timestampComparison != 0)
+ return timestampComparison;
+
+ // Timestamp might not be accurate enough to make a stable sorting decision.
+ return constructionOrder.CompareTo(other.constructionOrder);
}
public virtual bool Equals(Message other)