Skip to content

Commit 50d23cb

Browse files
committed
copy key to wraprec only if new one was created
1 parent 29b11a7 commit 50d23cb

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

agent/php_user_instrument_wraprec_hashmap.c

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ static nruserfn_t* nr_func_hashmap_lookup_internal(nr_func_hashmap_t* hashmap, n
121121
return NULL;
122122
}
123123

124-
static nruserfn_t* nr_func_hashmap_update_internal(nr_func_hashmap_t* hashmap, nr_func_hashmap_key_t* key) {
124+
static nruserfn_t* nr_func_hashmap_update_internal(nr_func_hashmap_t* hashmap, nr_func_hashmap_key_t* key, bool* created) {
125125
size_t hash;
126126
nr_func_bucket_t* bucket;
127127
nruserfn_t* wraprec;
@@ -132,9 +132,15 @@ static nruserfn_t* nr_func_hashmap_update_internal(nr_func_hashmap_t* hashmap, n
132132

133133
hash = nr_func_hashmap_hash_key(hashmap->log2_num_buckets, key);
134134
if (nr_func_hashmap_fetch_internal(hashmap, hash, key, &bucket)) {
135+
if (created) {
136+
*created = false;
137+
}
135138
return bucket->wraprec;
136139
}
137140

141+
if (created) {
142+
*created = true;
143+
}
138144
return nr_func_hashmap_add_internal(hashmap, hash, key);
139145
}
140146

@@ -388,6 +394,7 @@ nruserfn_t* nr_php_user_instrument_wraprec_hashmap_add(const char* namestr, size
388394
nr_scope_hashmap_key_t scope_key = {0};
389395
nr_func_hashmap_key_t func_key = {0};
390396
nr_func_hashmap_t* funcs_ht = NULL;
397+
bool is_new_wraprec = false;
391398
nruserfn_t* wraprec = NULL;
392399

393400

@@ -410,24 +417,26 @@ nruserfn_t* nr_php_user_instrument_wraprec_hashmap_add(const char* namestr, size
410417
return NULL;
411418
}
412419

413-
wraprec = nr_func_hashmap_update_internal(funcs_ht, &func_key);
420+
wraprec = nr_func_hashmap_update_internal(funcs_ht, &func_key, &is_new_wraprec);
414421

415422
if (NULL == wraprec) {
416423
return NULL;
417424
}
418425

419-
wraprec->funcname = nr_strndup(func_key.name, func_key.name_len);
420-
wraprec->funcnamelen = func_key.name_len;
421-
wraprec->funcnameLC = nr_string_to_lowercase(wraprec->funcname);
422-
if (func_key.is_method) {
423-
wraprec->classname = nr_strndup(scope_key.name, scope_key.name_len);
424-
wraprec->classnamelen = scope_key.name_len;
425-
wraprec->classnameLC = nr_string_to_lowercase(wraprec->classname);
426-
wraprec->is_method = 1;
427-
}
426+
if (is_new_wraprec) {
427+
wraprec->funcname = nr_strndup(func_key.name, func_key.name_len);
428+
wraprec->funcnamelen = func_key.name_len;
429+
wraprec->funcnameLC = nr_string_to_lowercase(wraprec->funcname);
430+
if (func_key.is_method) {
431+
wraprec->classname = nr_strndup(scope_key.name, scope_key.name_len);
432+
wraprec->classnamelen = scope_key.name_len;
433+
wraprec->classnameLC = nr_string_to_lowercase(wraprec->classname);
434+
wraprec->is_method = 1;
435+
}
428436

429-
wraprec->supportability_metric = nr_txn_create_fn_supportability_metric(
430-
wraprec->funcname, wraprec->classname);
437+
wraprec->supportability_metric = nr_txn_create_fn_supportability_metric(
438+
wraprec->funcname, wraprec->classname);
439+
}
431440

432441
return wraprec;
433442
}

0 commit comments

Comments
 (0)