1
1
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
8
12
9
13
loadTbbLibrary <- function (name ) {
10
14
@@ -27,6 +31,11 @@ loadTbbLibrary <- function(name) {
27
31
.tbbDllInfo <<- loadTbbLibrary(" tbb" )
28
32
.tbbMallocDllInfo <<- loadTbbLibrary(" tbbmalloc" )
29
33
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
+
30
39
# load RcppParallel library if available
31
40
.dllInfo <<- library.dynam(" RcppParallel" , pkgname , libname )
32
41
@@ -38,7 +47,11 @@ loadTbbLibrary <- function(name) {
38
47
if (! is.null(.dllInfo ))
39
48
library.dynam.unload(" RcppParallel" , libpath )
40
49
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
42
55
if (! is.null(.tbbMallocDllInfo ))
43
56
dyn.unload(.tbbMallocDllInfo [[" path" ]])
44
57
0 commit comments