]> Cypherpunks repositories - gostls13.git/commitdiff
internal/trace: change Less to make sorting events deterministice
authorPeter Weinberger <pjw@google.com>
Mon, 21 May 2018 14:45:59 +0000 (10:45 -0400)
committerPeter Weinberger <pjw@google.com>
Wed, 23 May 2018 14:18:18 +0000 (14:18 +0000)
    The existing code just used timestamps. The new code uses more fields
    when timestamps are equal.

Revised to shorten code per reviewer comments.

Change-Id: Ibd0824d0acd7644484d536b1a754a0da156fac3d
Reviewed-on: https://go-review.googlesource.com/113721
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
src/internal/trace/order.go

index 36ed58d675aa7aa104079543a2314f403df5f9dd..d0b58301d62d6e7a0ecb24daf85dbc9fd5f576a6 100644 (file)
@@ -133,7 +133,7 @@ func order1007(m map[int][]*Event) (events []*Event, err error) {
                        ev.Ts = ts
                }
        }
-       sort.Stable(eventList(events))
+       sort.Sort(eventList(events))
 
        return
 }
@@ -243,7 +243,20 @@ func (l orderEventList) Len() int {
 }
 
 func (l orderEventList) Less(i, j int) bool {
-       return l[i].ev.Ts < l[j].ev.Ts
+       a, b := l[i].ev, l[j].ev
+       if a.Ts != b.Ts {
+               return a.Ts < b.Ts
+       }
+       if a.Type != b.Type {
+               return a.Type < b.Type
+       }
+       if a.P != b.P {
+               return a.P < b.P
+       }
+       if a.G != b.G {
+               return a.G < b.G
+       }
+       return a.Args[0] < b.Args[0]
 }
 
 func (l orderEventList) Swap(i, j int) {