66 "bytes"
77 "container/list"
88 "github.com/funny/debug"
9- "runtime"
10- "strconv"
119 "sync"
1210)
1311
@@ -56,7 +54,7 @@ func (m *RWMutex) RUnlock() {
5654
5755var (
5856 globalMutex = new (sync.Mutex )
59- waitingList = make (map [int32 ]* lockUsage )
57+ waitingList = make (map [string ]* lockUsage )
6058 titleStr = []byte ("[DEAD LOCK]\n " )
6159 goStr = []byte ("goroutine " )
6260 waitStr = []byte (" wait" )
6967type lockUsage struct {
7068 monitor * monitor
7169 mode byte
72- goid int32
70+ goid string
7371 stack debug.StackInfo
7472}
7573
@@ -81,7 +79,7 @@ func (m *monitor) wait(mode byte) *lockUsage {
8179 globalMutex .Lock ()
8280 defer globalMutex .Unlock ()
8381
84- waitInfo := & lockUsage {m , mode , runtime . GetGoId (), debug .StackTrace (3 , 0 )}
82+ waitInfo := & lockUsage {m , mode , debug . GoroutineID (), debug .StackTrace (3 )}
8583 waitingList [waitInfo .goid ] = waitInfo
8684
8785 if m .holders == nil {
@@ -118,7 +116,7 @@ func (m *monitor) using(waitInfo *lockUsage) {
118116}
119117
120118func (m * monitor ) release (mode byte ) {
121- id := runtime . GetGoId ()
119+ id := debug . GoroutineID ()
122120 for i := m .holders .Back (); i != nil ; i = i .Prev () {
123121 if info := i .Value .(* lockUsage ); info .goid == id && info .mode == mode {
124122 m .holders .Remove (i )
@@ -132,7 +130,7 @@ func deadlockPanic(waitLink []*lockUsage) {
132130 buf .Write (titleStr )
133131 for i := 0 ; i < len (waitLink ); i ++ {
134132 buf .Write (goStr )
135- buf .WriteString (strconv . Itoa ( int ( waitLink [i ].goid )) )
133+ buf .WriteString (waitLink [i ].goid )
136134 buf .Write (waitStr )
137135 if waitLink [i ].mode == 'w' {
138136 buf .Write (writeStr )
@@ -153,7 +151,7 @@ func deadlockPanic(waitLink []*lockUsage) {
153151 waitHolder := j .Value .(* lockUsage )
154152 if waitHolder .goid == waitWho .goid {
155153 buf .Write (goStr )
156- buf .WriteString (strconv . Itoa ( int ( waitHolder .goid )) )
154+ buf .WriteString (waitHolder .goid )
157155 buf .Write (holdStr )
158156 if waitHolder .mode == 'w' {
159157 buf .Write (writeStr )
0 commit comments