Browse thread
C-threads & callbacks
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Markus Mottl <markus.mottl@g...> |
| Subject: | Re: [Caml-list] C-threads & callbacks |
Daniel Bünzli schrieb am Donnerstag, den 20. Jänner 2005:
> I don't understand what you are refering to. I don't think there's a
> problem as long as you take care to acquire ocaml's global lock to
> exectue the callbacks.
>
> #include <caml/signals.h>
> ...
> caml_leave_blocking_section();
> callback(*caml_named_value("myfun"), Val_unit);
> caml_enter_blocking_section();
> ...
>
> This ensures that callbacks into caml are properly serialized.
This only works if the callback is performed by a thread that was
spawned by OCaml (i.e. OCaml -> C -> OCaml). In this case the runtime
knows what the "current thread" is. But if a C-thread executes
"caml_leave_blocking_section" (C -> OCaml), it can segfault there,
because there may be no "current thread". And if there is, it is not
the C-thread but another currently executing OCaml-thread, which will
mess things up later.
That's why there should be some way to register a C-thread with the
OCaml-runtime. Currently this does not seem to be possible without
hacking the OCaml-implementation.
Regards,
Markus
--
Markus Mottl markus.mottl@gmail.com http://www.ocaml.info