11
2- .tbbDllInfo <- NULL
3- .tbbMallocDllInfo <- NULL
4- .tbbMallocProxyDllInfo <- NULL
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+ .tbbDllInfo <- NULL
6+ .tbbMallocDllInfo <- NULL
57
68loadTbbLibrary <- function (name ) {
79
@@ -20,11 +22,11 @@ loadTbbLibrary <- function(name) {
2022
2123.onLoad <- function (libname , pkgname ) {
2224
23- # load tbb, tbbmalloc, tbbmalloc_proxy
24- .tbbDllInfo <<- loadTbbLibrary(" tbb" )
25- .tbbMallocDllInfo <<- loadTbbLibrary(" tbbmalloc" )
26- .tbbMallocProxyDllInfo <<- loadTbbLibrary(" tbbmalloc_proxy" )
25+ # load tbb, tbbmalloc
26+ .tbbDllInfo <<- loadTbbLibrary(" tbb" )
27+ .tbbMallocDllInfo <<- loadTbbLibrary(" tbbmalloc" )
2728
29+ # load RcppParallel library
2830 library.dynam(" RcppParallel" , pkgname , libname )
2931
3032}
@@ -34,10 +36,16 @@ loadTbbLibrary <- function(name) {
3436 # unload the package library
3537 library.dynam.unload(" RcppParallel" , libpath )
3638
39+ # unload tbb_malloc if we loaded it
40+ if (! is.null(.tbbMallocDllInfo )) {
41+ dyn.unload(.tbbMallocDllInfo [[" path" ]])
42+ .tbbMallocDllInfo <<- NULL
43+ }
44+
3745 # unload tbb if we loaded it
38- dlls <- list ( .tbbDllInfo , .tbbMallocDllInfo , .tbbMallocProxyDllInfo )
39- for ( dll in dlls )
40- if ( ! is.null( dll ))
41- dyn.unload( dll [[ " path " ]])
46+ if ( ! is.null( .tbbDllInfo )) {
47+ dyn.unload( .tbbDllInfo [[ " path " ]] )
48+ .tbbDllInfo <<- NULL
49+ }
4250
4351}
0 commit comments