Version française
Home     About     Download     Resources     Contact us    
Browse thread
problem creating .cma library
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: ygrek <ygrekheretix@g...>
Subject: Re: [Caml-list] problem creating .cma library
On Sat, 09 Jan 2010 20:36:07 +0100
Guillaume Yziquel <guillaume.yziquel@citycable.ch> wrote:

> So if I want to call R code that multithreads with OCaml, I should write 
> something like
> 
> >   enter_blocking_section();
> >   PROTECT(e = R_tryEval(Sexp_val(sexp_list), R_GlobalEnv, &error));
> >   UNPROTECT(1);
> >   leave_blocking_section();
> 
> Am I correct?

I bet no. It is not safe to access block ocaml value
inside blocking_section. In this particular case Sexp_val(v) is Field
(v,0) whis in turn is v[0] or *v. So you read the pointer, then in
another thread GC moves things around and old copy of the pointed
value is overwritten, then you read the value through 
the old pointer and get garbage.
Put Sexp_val call before caml_enter_blocking_section().

-- 
 ygrek
 http://ygrek.org.ua