On Wednesday 09 March 2016 09:07:38 you wrote:
Hello,
Juraj Variny writes:
Hello,
can you please tell me how to:
- Initialize lisp environment in a thread that was already created by
C/C++ app? Is it possible for it to share existing lisp environment?
There is an example in examples/embed directory (file hello.c). What do you mean by sharing an existing lisp environment? cl_boot creates an environment for this instance.
Say I have main thread, where cl_boot was called, with some lisp
environment.
Then I call cl_boot in some other pre-existing thread, would it be able
to
access lisp environment of the main thread, evaluate symbols defined
there,
call functions etc? This is what I meant with shared environment.
It is enought to call cl_boot once. Calling it a second time won't do any harm, but the cl_boot isn't thread-safe, so don't call it twice at the same time from different threads.
After calling cl_boot once you should be able to work with lisp from any thread.
This "working with lisp from any thread" I have tried, and got segfaults and corruption immediately. Seems that ecl_env_ptr is thread-local variable and should be properly initialized for every thread where lisp is used.
OK, sorry then for this mistake of mine.
Dnia 10 marca 2016 00:59:53 CET, Juraj Variny juraj@blava.eu napisał(a):
On Wednesday 09 March 2016 09:07:38 you wrote:
Hello,
Juraj Variny writes:
Hello,
can you please tell me how to:
- Initialize lisp environment in a thread that was already
created by
C/C++ app? Is it possible for it to share existing lisp
environment?
There is an example in examples/embed directory (file hello.c).
What do
you mean by sharing an existing lisp environment? cl_boot creates
an
environment for this instance.
Say I have main thread, where cl_boot was called, with some lisp
environment.
Then I call cl_boot in some other pre-existing thread, would it be
able
to
access lisp environment of the main thread, evaluate symbols
defined
there,
call functions etc? This is what I meant with shared environment.
It is enought to call cl_boot once. Calling it a second time won't do any harm, but the cl_boot isn't thread-safe, so don't call it twice
at
the same time from different threads.
After calling cl_boot once you should be able to work with lisp from
any
thread.
This "working with lisp from any thread" I have tried, and got segfaults and corruption immediately. Seems that ecl_env_ptr is thread-local variable and should be properly initialized for every thread where lisp is used.