
Hi everybody, I’m new on this list, congratulations to everyone for the great work that you’re doing on GHC! I apologize if this is not the right list where to ask the following questions. Please point me to the correct list or IRC channel otherwise. I’m part of a small group of people who is going to work on a project that seems to need low-level handling of haskell threads. I’ve started delving into the ghc runtime API to understand if everything we need is exposed to the world or if we have to modify the runtime itself (which I would avoid if possible). I have a few questions about the functions that the runtime exports to the C world regarding the manipulation of tasks: - Fundamentally, is there a way for a C function called by a foreign call to suspend the haskell thread that called it, to be resumed later when appropriate? I see that the runtime has a concept of “blocking queue”, but I also see that the functions that work on blocking queues are not exported. I can manage a queue of TSOs myself, but then I need a way to put in sleep the task indefinitely up to a wake signal. In other words, can I sleep and awake haskell threads from a C function called by a foreign call? - I see the “suspendThread” and “resumeThread” functions exist in include/rts/Threads.h Are these the functions that I need for the point above? My main concern is that the comments in the source code for suspendThread say that these functions are used in case of a CCall, and put the thread in a specific queue, so they seems to have more specific role than what the name might suggest. - Also, I’m unable to find what a StgRegTable is (which is taken as argument by suspendThread). Thank you in advance for your help, Greetings, Nicola