11
2- # NOTE: we intentionally do _not_ load tbbmalloc_proxy as its intended
3- # use is to replace the default allocator, something that is dangerous
4- # to do by default (and especially should only be done via e.g. LD_PRELOAD)
5- .dllInfo <- NULL
6- .tbbDllInfo <- NULL
7- .tbbMallocDllInfo <- NULL
2+ # !diagnostics suppress=.dllInfo,.tbbDllInfo,.tbbMallocDllInfo,.tbbMallocProxyDllInfo
3+
4+ # NOTE: we intentionally do _not_ load tbbmalloc_proxy by default, as its
5+ # intended use is to replace the default allocator, something that may be
6+ # dangerous to do by default. in addition, TBB's documentation recommends
7+ # only loading explicitly via e.g. LD_PRELOAD
8+ .dllInfo <- NULL
9+ .tbbDllInfo <- NULL
10+ .tbbMallocDllInfo <- NULL
11+ .tbbMallocProxyDllInfo <- NULL
812
913loadTbbLibrary <- function (name ) {
1014
@@ -27,6 +31,11 @@ loadTbbLibrary <- function(name) {
2731 .tbbDllInfo <<- loadTbbLibrary(" tbb" )
2832 .tbbMallocDllInfo <<- loadTbbLibrary(" tbbmalloc" )
2933
34+ # load tbbmalloc_proxy, but only if requested
35+ useTbbMallocProxy <- Sys.getenv(" RCPP_PARALLEL_USE_TBBMALLOC_PROXY" , unset = " FALSE" )
36+ if (useTbbMallocProxy %in% c(" TRUE" , " True" , " true" , " 1" ))
37+ .tbbMallocProxyDllInfo <<- loadTbbLibrary(" tbbmalloc_proxy" )
38+
3039 # load RcppParallel library if available
3140 .dllInfo <<- library.dynam(" RcppParallel" , pkgname , libname )
3241
@@ -38,7 +47,11 @@ loadTbbLibrary <- function(name) {
3847 if (! is.null(.dllInfo ))
3948 library.dynam.unload(" RcppParallel" , libpath )
4049
41- # unload tbb_malloc if we loaded it
50+ # unload tbbmalloc_proxy if we loaded it
51+ if (! is.null(.tbbMallocProxyDllInfo ))
52+ dyn.unload(.tbbMallocProxyDllInfo [[" path" ]])
53+
54+ # unload tbbmalloc if we loaded it
4255 if (! is.null(.tbbMallocDllInfo ))
4356 dyn.unload(.tbbMallocDllInfo [[" path" ]])
4457
0 commit comments