<div dir="ltr">Hello,<div><br></div><div>I thought I'd try to clarify my question.</div><div><br></div><div>1) C-function in thread A will be called from OCaml, and places an OCaml callback cb onto a queue.</div><div>2) C-function in thread B will asynchronously receive the callback on the queue, do some computation, then run cb.</div><div><br></div><div>My understanding is that I need to re-acquire the runtime lock when cb is ran in thread B. Is that correct? If that is correct, I was thinking one could make an OCaml function to call `caml_release_runtime_system` and `caml_acquire_runtime_system`, then wrap the user callback cb:</div><div><br></div><div>let cb' arg =</div><div>  let () = caml_acquire_runtime_system () in</div><div>  let () = cb arg in</div><div>  caml_release_runtime_system ()</div><div><br></div><div>This cb' would then be passed to the thread B, instead of the user's cb.</div><div><br></div><div>I think this would work iff the callback returns unit, and we don't want to do anything with the return value. Also, my understanding is that the lock calls are _not_ reentrant, so the acquire/release set are needed.</div><div><br></div><div>Does that make sense? Any thoughts? Thanks!</div><div><br></div><div>Trevor</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 28, 2014 at 12:09 PM, Trevor Smith <span dir="ltr"><<a href="mailto:trevorsummerssmith@gmail.com" target="_blank">trevorsummerssmith@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>Following up from a thread "Lifecycle of a callback?" discussed on this list: I want to double check my thinking.</div><div><br></div><div>The C functions I am calling in libuv mostly do one thing: put a struct representing the system call to call, and the callback to run once the system call is called, on a queue that another thread will work on. If my understanding is correct, the runtime lock would need to be re-acquired when the OCaml callback is ran. However, it's not clear to me how to do this.</div><div><br></div><div>Thoughts? Thanks.</div><span class="HOEnZb"><font color="#888888"><div><div><br>Trevor</div></div></font></span></div>
</blockquote></div><br></div>