Improve sampling allocator (#205)

* Updated sampling

- dynamic sampler is constructed with a shared pointer to an allocator instance
- dynamic allocator handles multiple sampler
  - eliminates need for every per-thread dynamic sampler to start background allocator thread

* Fix usage of tim::popen
Tento commit je obsažen v:
Jonathan R. Madsen
2022-11-13 14:37:07 -06:00
odevzdal GitHub
rodič ab0a3e9d7d
revize 2135f82ab8
5 změnil soubory, kde provedl 124 přidání a 13 odebrání
+9 -9
Zobrazit soubor
@@ -2197,18 +2197,18 @@ main(int argc, char** argv)
verbprintf(0, "Consider instrumenting the relevant libraries...\n");
verbprintf(0, "\n");
using TIMEMORY_PIPE = tim::popen::TIMEMORY_PIPE;
auto cmdv_envp = std::array<char*, 2>{};
cmdv_envp.fill(nullptr);
cmdv_envp.at(0) = strdup("LD_TRACE_LOADED_OBJECTS=1");
auto ldd = tim::popen::popen(cmdv0.c_str(), nullptr, cmdv_envp.data());
auto linked_libs = tim::popen::read_ldd_fork(ldd);
auto perr = tim::popen::pclose(ldd);
for(auto& itr : cmdv_envp)
::free(itr);
tim::set_env("LD_TRACE_LOADED_OBJECTS", "1", 1);
TIMEMORY_PIPE* ldd = tim::popen::popen(cmdv0.c_str());
tim::set_env("LD_TRACE_LOADED_OBJECTS", "0", 1);
strvec_t linked_libraries = tim::popen::read_ldd_fork(ldd);
auto perr = tim::popen::pclose(ldd);
if(perr != 0) perror("Error in omnitrace_fork");
for(const auto& itr : linked_libraries)
for(const auto& itr : linked_libs)
verbprintf(0, "\t%s\n", itr.c_str());
verbprintf(0, "\n");