Even after some research I couldn't find -- or stupidly missed -- what 
happens in this case; I suspect this to "somehow" be the underlaying cause 
of some of my applications ending up with their main OS-level thread 
sitting in the wrong network namespace albeit I made sure to ditch all 
OS-level threads after being "tainted" by switching namespaces. The problem 
seems to go away when I immediately lock the main Go routines OS-level 
thread before doing anything else, but I'm unsure if that is just by chance 
or a correct cure?

So that's what I'm doing right now:

   - a goroutine *G* (which *isn't the main Goroutine,* the one with ID 1) 
   is scheduled by some arcane Gopher scheduling deity of bad luck onto the 
*main 
   OS-level thread T0* that is *also representing (at least on Linux) the 
   process* as such. If I remember correctly, this is also termed the "task 
   leader", but I slightly disgress.
   - now that goroutine *G* on thread *T0* calls *runtime.LockOSThread()* 
   and say, switches one of its Linux kernel namespaces, maybe its network 
   namespace.
   - after doing some work, *G locked to T0* now simply terminates.

What happens to T0, the initial/leader thread representing the whole 
program process?

My (albeit limited) understand so far for *T OS-level threads that aren't 
T0* is that when a *G* terminates while still runtime.LockOSThread'ed, this 
correctly throws away *T* as to avoid reusing it on a different 
unsuspecting G' and with the wrong namespaces set.

But what about *T0*? Wouldn't throwing away T0 terminate the whole program 
... which doesn't seem to be the case? Or am I mistaken here?

-- 
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/f231ab23-68fd-4fb4-b2bb-76391ce737a5n%40googlegroups.com.

Reply via email to