On Saturday, September 29, 2018 at 2:08:03 PM UTC+2, Tamás Gulácsi wrote:
>
> Yes, but is that a one and only goroutine?


No. The cgo call is opened for every new incoming user request.

Let's summarize:

- Every network request creates a goroutine without response 
  processing result to a user of that goroutine.
- The goroutine instantly proceeds a cgo call and the cgo call 
  creates a non-Go thread, then a Pango call pango_font_map_get_default()
  is involved in the non-Go thread.
- According to pango_font_map_get_default(), it holds a static thread-safe 
variable. 
- The original pure C code is able to proceed execution without involving 
Go.
  But stuck at the Pango call when involving cgo
- runtime.LockOSThread doesn't work:
go func() {
    runtime.LockOSThread()
    handleConnection(timeout)
    runtime.UnlockOSThread()
}()

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to