[Rcpp-devel] using Rcpp function Module twice triggers segfault

Jiqiang Guo guojq28 at gmail.com
Fri Sep 7 05:51:49 CEST 2012


On Thu, Sep 6, 2012 at 11:43 PM, Dirk Eddelbuettel <edd at debian.org> wrote:

>
> On 6 September 2012 at 21:24, Jiqiang Guo wrote:
> | Dear List,
> |
> | In the middle of figure out another problem, I used function Module
> twice, but
> | then I got segfault.  Is there any solution for this?  For the time
> being, I
> | really need to call function Module more than once.
>
> a) I simply never combine Rcpp modules with inline. With a package, things
> work.


> b) In
>
>       m <- Module("foo1", getDynLib(fx))
>       m2 <- Module("foo1", getDynLib(fx))
>
>    are you by chance mistaking Module() [ ie the declaration ] with new() [
>    ie the instantiation of an object ] ?
>
No. I am just trying to narrow down what causes the real problem I have.
And I think now it is because I called Module a second time. Following
Module call, I do have new ....

Anyway, the above a) and b) do not explain and solve the problem I have.
Thanks,

Jiqiang




>
> Dirk
>
>
> | Best,
> | Jiqiang
> |
> | P.S. an example code and the dump of output.
> | In addition, my sessionInfo()
> |
> | > sessionInfo()
> | R version 2.15.1 (2012-06-22)
> | Platform: x86_64-pc-linux-gnu (64-bit)
> |
> | locale:
> |  [1] LC_CTYPE=en_US.utf8       LC_NUMERIC=C
> |  [3] LC_TIME=en_US.utf8        LC_COLLATE=en_US.utf8
> |  [5] LC_MONETARY=en_US.utf8    LC_MESSAGES=en_US.utf8
> |  [7] LC_PAPER=C                LC_NAME=C
> |  [9] LC_ADDRESS=C              LC_TELEPHONE=C
> | [11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C
> |
> | attached base packages:
> | [1] stats     graphics  grDevices utils     datasets  methods   base
> |
> |
> | other attached packages:
> | [1] inline_0.3.8 Rcpp_0.9.13
> |
> | loaded via a namespace (and not attached):
> | [1] tools_2.15.1
> |
> |
> | require("Rcpp")
> | require("inline")
> |
> | inc <- '
> | class Foo {
> | private:
> |   int x_;
> | public:
> |   Foo(int x) : x_(x) { }
> |   void setx(int x) { x_ = x;}
> |   int getx() const { return x_;}
> | };
> |
> | RCPP_MODULE(foo1) {
> |   class_<Foo>("Foo")
> |   .constructor<int>()
> |   .method("setx", &Foo::setx)
> |   .method("getx", &Foo::getx)
> |   ;
> | }
> | '
> | fx <- cxxfunction(signature(), "", include = inc, plugin = "Rcpp",
> verbose = !
> | TRUE)
> | m <- Module("foo1", getDynLib(fx))
> | m2 <- Module("foo1", getDynLib(fx))
> |
> | ======
> |
> | > m <- Module("foo1", getDynLib(fx))
> | > m2 <- Module("foo1", getDynLib(fx))
> | >
> | > f <- new(m$Foo, 1)
> | > f2 <- new(m2$Foo, 1)
> |
> |  *** caught segfault ***
> | address 0x90, cause 'memory not mapped'
> |
> | Traceback:
> |  1: .Call(symbol)
> |  2: Module(module, mustStart = TRUE)
> |  3: .getModulePointer(x)
> |  4: m2$Foo
> |  5: .getClassFromCache(Class, where)
> |  6: getClass(Class, where = topenv(parent.frame()))
> |  7: new(m2$Foo, 1)
> | aborting ...
> |
> |
> |
> | ----------------------------------------------------------------------
> | _______________________________________________
> | Rcpp-devel mailing list
> | Rcpp-devel at lists.r-forge.r-project.org
> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> --
> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20120906/fa0c8f94/attachment.html>


More information about the Rcpp-devel mailing list