| 1234567891011121314151617181920212223242526272829303132333435 |
- // Copyright 2016 Peter Mattis.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- // implied. See the License for the specific language governing
- // permissions and limitations under the License. See the AUTHORS file
- // for names of contributors.
- package goid
- import (
- "bytes"
- "runtime"
- "strconv"
- )
- func ExtractGID(s []byte) int64 {
- s = s[len("goroutine "):]
- s = s[:bytes.IndexByte(s, ' ')]
- gid, _ := strconv.ParseInt(string(s), 10, 64)
- return gid
- }
- // Parse the goid from runtime.Stack() output. Slow, but it works.
- func getSlow() int64 {
- var buf [64]byte
- return ExtractGID(buf[:runtime.Stack(buf[:], false)])
- }
|