Skip to content

Commit 4ec60a1

Browse files
authored
Merge pull request #92 from eparshut/patch-1
Fix compilation warnings and memory leaks in reference collector
2 parents 321195f + e35acc4 commit 4ec60a1

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

src/ittnotify_refcol/itt_refcol_impl.c

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ ITT_EXTERN_C void ITTAPI __itt_api_init(__itt_global* p, __itt_group_id init_gro
9191
{
9292
if (p != NULL)
9393
{
94+
(void)init_groups;
9495
fill_func_ptr_per_lib(p);
9596
ref_col_init();
9697
}
@@ -138,47 +139,50 @@ void log_func_call(uint8_t log_level, const char* function_name, const char* mes
138139
/* This implementation is designed to log ITTAPI functions calls.*/
139140
/* ------------------------------------------------------------------------------ */
140141

142+
/* Please remember to call free() after using get_metadata_elements() */
141143
char* get_metadata_elements(size_t size, __itt_metadata_type type, void* metadata)
142144
{
143145
char* metadata_str = malloc(sizeof(char) * LOG_BUFFER_MAX_SIZE);
144146
*metadata_str = '\0';
147+
uint16_t offset = 0;
145148

146149
switch (type)
147150
{
148151
case __itt_metadata_u64:
149152
for (uint16_t i = 0; i < size; i++)
150-
sprintf(metadata_str, "%s%llu;", metadata_str, ((uint64_t*)metadata)[i]);
153+
offset += sprintf(metadata_str + offset, "%lu;", ((uint64_t*)metadata)[i]);
151154
break;
152155
case __itt_metadata_s64:
153156
for (uint16_t i = 0; i < size; i++)
154-
sprintf(metadata_str, "%s%lld;", metadata_str, ((int64_t*)metadata)[i]);
157+
offset += sprintf(metadata_str + offset, "%ld;", ((int64_t*)metadata)[i]);
155158
break;
156159
case __itt_metadata_u32:
157160
for (uint16_t i = 0; i < size; i++)
158-
sprintf(metadata_str, "%s%lu;", metadata_str, ((uint32_t*)metadata)[i]);
161+
offset += sprintf(metadata_str + offset, "%u;", ((uint32_t*)metadata)[i]);
159162
break;
160163
case __itt_metadata_s32:
161164
for (uint16_t i = 0; i < size; i++)
162-
sprintf(metadata_str, "%s%ld;", metadata_str, ((int32_t*)metadata)[i]);
165+
offset += sprintf(metadata_str + offset, "%d;", ((int32_t*)metadata)[i]);
163166
break;
164167
case __itt_metadata_u16:
165168
for (uint16_t i = 0; i < size; i++)
166-
sprintf(metadata_str, "%s%u;", metadata_str, ((uint16_t*)metadata)[i]);
169+
offset += sprintf(metadata_str + offset, "%u;", ((uint16_t*)metadata)[i]);
167170
break;
168171
case __itt_metadata_s16:
169172
for (uint16_t i = 0; i < size; i++)
170-
sprintf(metadata_str, "%s%d;", metadata_str, ((int16_t*)metadata)[i]);
173+
offset += sprintf(metadata_str + offset, "%d;", ((int16_t*)metadata)[i]);
171174
break;
172175
case __itt_metadata_float:
173176
for (uint16_t i = 0; i < size; i++)
174-
sprintf(metadata_str, "%s%f;", metadata_str, ((float*)metadata)[i]);
177+
offset += sprintf(metadata_str + offset, "%f;", ((float*)metadata)[i]);
175178
break;
176179
case __itt_metadata_double:
177180
for (uint16_t i = 0; i < size; i++)
178-
sprintf(metadata_str, "%s%lf;", metadata_str, ((double*)metadata)[i]);
181+
offset += sprintf(metadata_str + offset, "%lf;", ((double*)metadata)[i]);
179182
break;
180183
default:
181-
printf("ERROR: Unknow metadata type\n");
184+
printf("ERROR: Unknow metadata type\n");
185+
break;
182186
}
183187

184188
return metadata_str;
@@ -213,6 +217,7 @@ ITT_EXTERN_C void ITTAPI __itt_frame_begin_v3(const __itt_domain *domain, __itt_
213217
{
214218
if (domain != NULL)
215219
{
220+
(void)id;
216221
LOG_FUNC_CALL_INFO("functions args: domain=%s", domain->nameA);
217222
}
218223
else
@@ -225,6 +230,7 @@ ITT_EXTERN_C void ITTAPI __itt_frame_end_v3(const __itt_domain *domain, __itt_id
225230
{
226231
if (domain != NULL)
227232
{
233+
(void)id;
228234
LOG_FUNC_CALL_INFO("functions args: domain=%s", domain->nameA);
229235
}
230236
else
@@ -252,6 +258,8 @@ ITT_EXTERN_C void ITTAPI __itt_task_begin(
252258
{
253259
if (domain != NULL && name != NULL)
254260
{
261+
(void)taskid;
262+
(void)parentid;
255263
LOG_FUNC_CALL_INFO("functions args: domain=%s handle=%s", domain->nameA, name->strA);
256264
}
257265
else
@@ -277,8 +285,12 @@ ITT_EXTERN_C void __itt_metadata_add(const __itt_domain *domain, __itt_id id,
277285
{
278286
if (domain != NULL && count != 0)
279287
{
288+
(void)id;
289+
(void)key;
290+
char* metadata_str = get_metadata_elements(count, type, data);
280291
LOG_FUNC_CALL_INFO("functions args: domain=%s metadata_size=%lu metadata[]=%s",
281-
domain->nameA, count, get_metadata_elements(count, type, data));
292+
domain->nameA, count, metadata_str);
293+
free(metadata_str);
282294
}
283295
else
284296
{
@@ -300,16 +312,19 @@ ITT_EXTERN_C void __itt_histogram_submit(__itt_histogram* hist, size_t length, v
300312
{
301313
if (x_data != NULL)
302314
{
315+
char* x_data_str = get_metadata_elements(length, hist->x_type, x_data);
316+
char* y_data_str = get_metadata_elements(length, hist->y_type, y_data);
303317
LOG_FUNC_CALL_INFO("functions args: domain=%s name=%s histogram_size=%lu x[]=%s y[]=%s",
304-
hist->domain->nameA, hist->nameA, length,
305-
get_metadata_elements(length, hist->x_type, x_data),
306-
get_metadata_elements(length, hist->y_type, y_data));
318+
hist->domain->nameA, hist->nameA, length, x_data_str, y_data_str);
319+
free(x_data_str);
320+
free(y_data_str);
307321
}
308322
else
309323
{
324+
char* y_data_str = get_metadata_elements(length, hist->y_type, y_data);
310325
LOG_FUNC_CALL_INFO("functions args: domain=%s name=%s histogram_size=%lu y[]=%s",
311-
hist->domain->nameA, hist->nameA, length,
312-
get_metadata_elements(length, hist->y_type, y_data));
326+
hist->domain->nameA, hist->nameA, length, y_data_str);
327+
free(y_data_str);
313328
}
314329
}
315330
else

0 commit comments

Comments
 (0)