The Rcpp::exception constructor does, rcpp_set_stack_trace(Shield<SEXP>(stack_trace()))
This can corrupt R if called within an OpenMP block. It would be nice if there were some warnings about this (mis)usage OR, better, if Rcpp::exception was thread-safe. Here's the usage that should be A-OK: std::string err; bool more = true; #pragma omp parallel num_threads(numThreads) while (more) { int tid = omp_get_thread_num(); // ... do stuff ... try { // ... do stuff ... if (bad) stop("oops, this is bad"); } catch (const std::exception& e) { #pragma omp atomic err = e.what(); more = false; } catch (...) { more = false; } } if (err.length()) stop("%s", err.c_str()); -- Joshua N. Pritikin, Ph.D. Virginia Institute for Psychiatric and Behavioral Genetics Virginia Commonwealth University PO Box 980126 800 E Leigh St, Biotech One, Suite 1-133 Richmond, VA 23219 http://exuberant-island.surge.sh _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel