[GHC] #8371: ghci byte compiler + FFI crashes when used with embedded R
Dominick Samperi
djsamperi at gmail.com
Sat Sep 28 14:35:54 UTC 2013
After further testing it appears this work-around is not enough.
It needs to be combined with another suggestion in this
thread: must use ghc-7.7. There is a segfault (but no
"C stack usage" message) when ghc-7.6.3 is used.
Thank you!
On Sat, Sep 28, 2013 at 10:08 AM, Dominick Samperi <djsamperi at gmail.com>wrote:
> Thanks! Turning off R's stack limit checks will not work. I tried this
> and this leads to a segfault. Fortunately, your experiments led me
> to a work-around: simply use the -fno-ghci-sandbox flag.
>
> R is not thread-safe, and this flag tells ghci to run computations
> in the main thread instead of forking.
>
>
> On Sat, Sep 28, 2013 at 1:29 AM, GHC <ghc-devs at haskell.org> wrote:
>
>> #8371: ghci byte compiler + FFI crashes when used with embedded R
>> -------------------------------+----------------------------------
>> Reporter: dsamperi | Owner:
>> Type: bug | Status: new
>> Priority: normal | Milestone:
>> Component: GHCi | Version: 7.6.3
>> Resolution: | Keywords:
>> Operating System: Linux | Architecture: x86_64 (amd64)
>> Type of failure: GHCi crash | Difficulty: Unknown
>> Test Case: | Blocked By:
>> Blocking: | Related Tickets:
>> -------------------------------+----------------------------------
>>
>> Comment (by rwbarton):
>>
>> I can reproduce this without ghci, by putting a forkIO around the body of
>> main (and adding a threadDelay in the main thread).
>>
>> It seems to just be an interaction between R's method for determining the
>> base address of the stack and the way pthread allocates stacks for new
>> threads. Try this C example program `pt.c`.
>>
>> {{{
>> #include <stdio.h>
>> #include <unistd.h>
>> #include <pthread.h>
>>
>> int Rf_initEmbeddedR(int argc, char **argv);
>>
>> void *foo(void *blah)
>> {
>> char *args[] = {"pt", "--gui=none", "--silent", "--vanilla"};
>> int r;
>> setenv("R_HOME", "/usr/lib/R", 1);
>> r = Rf_initEmbeddedR(sizeof(args)/sizeof(args[0]), args);
>> printf("r = %d\n", r);
>> }
>>
>> int main(void)
>> {
>> pthread_t tid;
>> pthread_create(&tid, NULL, foo, NULL);
>> while (1)
>> sleep(1);
>> return 0;
>> }
>> }}}
>>
>> {{{
>> rwbarton at adjunction:/tmp$ gcc -o pt pt.c -lpthread -lR
>> rwbarton at adjunction:/tmp$ ./pt
>> Error: C stack usage is too close to the limit
>> Error: C stack usage is too close to the limit
>> r = 1
>> }}}
>>
>> It would probably be best to just disable R's stack limit checks, if
>> possible.
>>
>> --
>> Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8371#comment:6>
>> GHC <http://www.haskell.org/ghc/>
>> The Glasgow Haskell Compiler
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130928/ebc95078/attachment.htm>
More information about the ghc-devs
mailing list