From edd at debian.org  Wed Feb  1 19:07:08 2012
From: edd at debian.org (Dirk Eddelbuettel)
Date: Wed, 1 Feb 2012 12:07:08 -0600
Subject: [Rd] Crash in R using embedded.
In-Reply-To: <CAM6_Vww=6SjgiDpZLQookKN=4jJCWz3HEBJyjTisq6yfAYaHMQ@mail.gmail.com>
References: <CAM6_Vww=6SjgiDpZLQookKN=4jJCWz3HEBJyjTisq6yfAYaHMQ@mail.gmail.com>
Message-ID: <20265.32588.891886.41937@max.nulle.part>


On 1 February 2012 at 10:24, Dave Pugmire wrote:
| Hi,
| I'm new to R, and am trying to embed R into another application.
| I'm calling gev.fit() from the ismev package, and it is crashing somewhere
| inside it.
| gdb is not catching it, and valgrind is not showing any memory corruption
| issues.
| I suspect it's memory corruption, because it doesn't crash in exactly the
| same spot each time.
| I'm running R 2.12.2 on a 64 bit linux (Ubuntu 10.04)
| 
| Also, before I make the gev.fit() call, I save out the R state using
| "save.image(....)", then load the image file into a standalone R on the
| console, and call gev.fit(), and it works fine.
| So, it's something to do with my app, and the R.
| 
| I'm looking for hints/ideas/tricks/etc for debugging this.
| I'm starting to put print statements into the R code, and into the C code
| in R (src/main/optim.c), but it hasn't shown me the source of the problem.
| 
| Thanks!
| 
| 
| Here is the code I'm using to initialize:
| 
| putenv("R_HOME=/apps/R/install/lib64/R");
| const char *R_argv[]= {"RInterfaceTest", "--gui=none", "--no-save",
| "--no-readline", "--silent"};
| Rf_initialize_R(sizeof(R_argv)/sizeof(R_argv[0]), const_cast<char
| **>(R_argv));
| 
| setup_Rmainloop();
| 
| ParseStatus status;
| SEXP cmdSexp, cmdexpr = R_NilValue;
| int error;
| string rcommand = "f<-file(paste(tempdir(), \"/Routput.txt\", sep = \"\"),
| open=\"wt+\")\nsink(f)\n";
| PROTECT(cmdSexp = allocVector(STRSXP, 1));
| SET_STRING_ELT(cmdSexp, 0, mkChar(rcommand.c_str()));
| 
| cmdexpr = PROTECT(R_ParseVector(cmdSexp, -1, &status, R_NilValue));
| for(int i = 0; i < length(cmdexpr); i++)
| {
|      R_tryEval(VECTOR_ELT(cmdexpr, i),NULL,&error);
|  }
|  UNPROTECT(2);

FWIW I think both littler and RInside use a bit more legwork to initialize
the R engine they embed. The code is public, so you could look at that.

And/or you could of course just use RInside to make your life easier...

Dirk

-- 
"Outside of a dog, a book is a man's best friend. Inside of a dog, it is too
dark to read." -- Groucho Marx



[Rd] Crash in R using embedded.
Dirk Eddelbuettel