[Rcpp-devel] Rcpp_precious_remove again (Windows)

Dominick Samperi djsamperi at gmail.com
Wed Jan 18 03:15:50 CET 2023


Hello,

I think I found a problem under Windows with the repl code from RInside.
The problem appears if I simply compile the code in
RInside/inst/examples/standard using the Makefile.win there,
after a few hacks to deal with spaces in file names and the direction of
slashes.

The problem appears with the example rinside_interactive0.cpp, but to keep
things simple I've stripped out just the repl code into repl.cpp. It is
attached, along with a Makefile that works under Windows, with g++ from
Rtool42, specifically,

set PATH=c:\Rtools42\x86_64-w64-mingw32.static.posic\bin;%PATH%

When repl.exe is run an extra window pops up, and there are random
terminations, and sometimes a crash, especially if you try to plot
something. The program immediately terminates after plotting.

None of this happens under Linux (Ubuntu), where the program works as
expected.

I tried installing gdb using 'pacman -Sy gdb' (following CRAN docs), and
there were no apparent problems, but some of the DLL's had the wrong
version, and gdb could not be started. (Missing DLL's were msys-ffi-8.dll
and msys-unistring-5.dll.)

I was able to build using Visual Studio, and in that case the app crashes
immediately with a complaint about Rcpp_precious_remove. But here I could
bring up a debugger and step trough code, and sure enough it crashes soon
after the call
GET_CALLABLE("Rcpp_precious_remove"). Stepping into this function leads to
Microsoft code in thread_safe_statics.cpp that implements a critical
section, suggesting
that more than one thread is started.

I wonder if the problem is related to the fact that R is not thread safe?

Or could it be that the preserved objects are bigger under Windows?

I'm working with Rcpp_1.0.9 and RInside_0.2.17, with R-4.2.2.

Thanks,
Dominick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20230117/1e7a46f2/attachment.html>
-------------- next part --------------
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4;  tab-width: 8; -*-
//
// Example of a planetary motion solver with interactive console
//
// Copyright (C) 2009         Dirk Eddelbuettel 
// Copyright (C) 2010 - 2017  Dirk Eddelbuettel and Romain Francois
// Copyright (C) 2017         Dirk Eddelbuettel, Romain Francois and Łukasz Łaniewski-Wołłk
//
// GPL'ed 

#include <RInside.h>                    // for the embedded R via RInside

int main(int argc, char *argv[]) {
    RInside R(argc, argv, false, false, true); // Create an embedded R instance 

    std::cout << "[ You can finish the with Ctrl+D ]" << std::endl;
    R.parseEval("options(prompt = 'R console > ')");
    R.parseEval("X11()");
    R.repl() ;
    R.parseEval("dev.off()");
    exit(0);
}

-------------- next part --------------
A non-text attachment was scrubbed...
Name: Makefile
Type: application/octet-stream
Size: 347 bytes
Desc: not available
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20230117/1e7a46f2/attachment.obj>


More information about the Rcpp-devel mailing list