Re: [go-nuts] Goroutines count and id

2020-06-30 Thread Hugo Cornelis
If you want to identify goroutines at runtime, you can find in the
attachments patches for Golang 1.10 to allow to assign a name to a
goroutine.

These are patches against Golang 1.10 because I have been using the gccgo
runtime that comes with GCC 8.4.

This could help you forward for what you want.

Hugo


On Tue, Jun 30, 2020 at 9:50 AM Jan Mercl <0xj...@gmail.com> wrote:

> On Tue, Jun 30, 2020 at 9:36 AM Durga Someswararao G
>  wrote:
>
> > Is it possible to get goroutine id when we creted?
> > Is it possible to get goroutines count while we creating?
> > Is it possible to terminate a goroutine based on ID like if any
> goroutine has infinite loops?
> > Is it possible to clean up memory of variable like we have free in C?
>
> The answer to all of the above questions, in the first approximation, is
> no.
>
> Unsafe tricks may help to achieve some of those goals. What's the
> purpose? Is this a XY problem?
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CAA40n-ULnCkc7hw0c%3DQCTSAvyP3ZO4rXmTEjm5fb6m2QTJC%3Duw%40mail.gmail.com
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAARrXCTo3W4s6ahPDNHktU6U_uefRbjnENiDNkfA6Smqb7BCqg%40mail.gmail.com.
From 99d77ef6698838e3c77178a2c719369b3cac9f25 Mon Sep 17 00:00:00 2001
From: Hugo Cornelis 
Date: Tue, 2 Jun 2020 19:44:08 +0200
Subject: [PATCH 2/2] improved goroutine name reporting wrt parsing

---
 libgo/go/runtime/traceback_gccgo.go | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/libgo/go/runtime/traceback_gccgo.go b/libgo/go/runtime/traceback_gccgo.go
index b53dc6f8e30..652d3d7ba71 100644
--- a/libgo/go/runtime/traceback_gccgo.go
+++ b/libgo/go/runtime/traceback_gccgo.go
@@ -8,6 +8,7 @@
 package runtime
 
 import (
+	"os"
 	"runtime/internal/sys"
 	"sync/atomic"
 	"unsafe"
@@ -15,6 +16,9 @@ import (
 
 func GoroutineSetName(name string) {
 	var length uint32
+
+	os.Stderr.WriteString("GoroutineSetName(" + name + ")\n")
+
 	if len(name) > GoroutineNameLengthMax {
 		length = GoroutineNameLengthMax
 	} else {
@@ -28,6 +32,7 @@ func GoroutineSetName(name string) {
 	atomic.StoreUint32(&_g_.nameLength, 0)
 	copy(_g_.name[:], name[0:length])
 	atomic.StoreUint32(&_g_.nameLength, length)
+
 }
 
 func printcreatedby(gp *g) {
@@ -174,7 +179,7 @@ func goroutineheader(gp *g) {
 	nameLength := atomic.LoadUint32(&gp.nameLength)
 
 	if nameLength != 0 {
-		print("goroutine ", gp.goid, " '")
+		print("goroutine, name: ", gp.goid, " '")
 		gwrite(gp.name[0:nameLength])
 		print("' [", status)
 	} else {
-- 
2.17.1

From 89996ebc2d19c9a8e0ee7d567c95430d81f42b26 Mon Sep 17 00:00:00 2001
From: Hugo Cornelis 
Date: Mon, 18 May 2020 14:49:03 +0200
Subject: [PATCH 1/2] added goroutine naming

---
 libgo/go/runtime/proc.go|  1 +
 libgo/go/runtime/runtime2.go|  7 +++
 libgo/go/runtime/traceback_gccgo.go | 32 -
 3 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/libgo/go/runtime/proc.go b/libgo/go/runtime/proc.go
index a6746c9f0a8..10a2ffc2f62 100644
--- a/libgo/go/runtime/proc.go
+++ b/libgo/go/runtime/proc.go
@@ -2614,6 +2614,7 @@ func goexit0(gp *g) {
 	gp.param = nil
 	gp.labels = nil
 	gp.timer = nil
+	gp.nameLength = 0
 
 	if gcBlackenEnabled != 0 && gp.gcAssistBytes > 0 {
 		// Flush assist credit to the global pool. This gives
diff --git a/libgo/go/runtime/runtime2.go b/libgo/go/runtime/runtime2.go
index 0299d5a788f..0ff04fa867a 100644
--- a/libgo/go/runtime/runtime2.go
+++ b/libgo/go/runtime/runtime2.go
@@ -88,6 +88,10 @@ const (
 	_Gscanwaiting  = _Gscan + _Gwaiting  // 0x1004
 )
 
+const (
+	GoroutineNameLengthMax = 30
+)
+
 const (
 	// P status
 	_Pidle= iota
@@ -435,6 +439,9 @@ type g struct {
 
 	context  g_ucontext_t // saved context for setcontext
 	stackcontext [10]uintptr  // split-stack context
+
+	nameLength uint32
+	name[GoroutineNameLengthMax] uint8
 }
 
 type m struct {
diff --git a/libgo/go/runtime/traceback_gccgo.go b/libgo/go/runtime/traceback_gccgo.go
index 8551ec19ac3..b53dc6f8e30 100644
--- a/libgo/go/runtime/traceback_gccgo.go
+++ b/libgo/go/runtime/traceback_gccgo.go
@@ -9,9 +9,27 @@ package runtime
 
 import (
 	"runtime/internal/sys"
+	"sync/atomic"
 	"unsafe"
 )
 
+func GoroutineSetName(name string) {
+	var length uint32
+	if len(name) > GoroutineNameLengthMax {
+		length = GoroutineNameLengthMax
+	} else {
+		length = uint32(len(name))
+	}
+
+	_g_ := getg()
+
+	//! is locking required here?  Play safe wrt goroutin

Re: [go-nuts] Goroutines count and id

2020-06-30 Thread Jan Mercl
On Tue, Jun 30, 2020 at 9:36 AM Durga Someswararao G
 wrote:

> Is it possible to get goroutine id when we creted?
> Is it possible to get goroutines count while we creating?
> Is it possible to terminate a goroutine based on ID like if any goroutine has 
> infinite loops?
> Is it possible to clean up memory of variable like we have free in C?

The answer to all of the above questions, in the first approximation, is no.

Unsafe tricks may help to achieve some of those goals. What's the
purpose? Is this a XY problem?

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAA40n-ULnCkc7hw0c%3DQCTSAvyP3ZO4rXmTEjm5fb6m2QTJC%3Duw%40mail.gmail.com.