Skip to content

Commit

Permalink
perf(preload): only look up original function once
Browse files Browse the repository at this point in the history
  • Loading branch information
basti1302 committed Jun 22, 2024
1 parent 70cfeeb commit 78a0425
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions images/dash0-instrumentation/preload/src/libdash0envhook.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@ typedef char* (*getenv_fun_ptr)(const char* name);

typedef char* (*secure_getenv_fun_ptr)(const char* name);

getenv_fun_ptr original_getenv;
secure_getenv_fun_ptr original_secure_getenv;

int num_map_entries = 1;
Entry map[1];
bool init = false;

char* default_node_options_value = "--require /opt/dash0/instrumentation/node.js/node_modules/@dash0/opentelemetry/src/index.js";


void init_map() {
if (init) {
return;
Expand Down Expand Up @@ -60,12 +62,16 @@ char* _getenv(char* (*original_function)(const char* name), const char* name)
}

char* getenv(const char* name) {
getenv_fun_ptr original_function = (getenv_fun_ptr)dlsym(RTLD_NEXT, "getenv");
return _getenv(original_function, name);
if (!original_getenv) {
original_getenv = (getenv_fun_ptr)dlsym(RTLD_NEXT, "getenv");
}
return _getenv(original_getenv, name);
}

char* secure_getenv(const char* name) {
secure_getenv_fun_ptr original_function = (secure_getenv_fun_ptr)dlsym(RTLD_NEXT, "secure_getenv");
return _getenv(original_function, name);
if (!original_secure_getenv) {
original_secure_getenv = (secure_getenv_fun_ptr)dlsym(RTLD_NEXT, "secure_getenv");
}
return _getenv(original_secure_getenv, name);
}

0 comments on commit 78a0425

Please sign in to comment.