You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I was going through test_atomics.cpp and found lots of memory leakage due to conditional statements(line no. 26,36,47,58).
So I would like to ask, instead of handling manually free function why are we not using unique_ptr here?
I understood some function are using aligned memory allocation/deallocation like free_mtdata(). So here I would like to propose to use wrapper class or custom deleter with smart pointer.
char *valids is used for incrementing at particular index(see line 6,10,28). I would to suggest to use heap allocated memory of type int8_t instead of char for better coding practice and understanding.
Disclaimer: I am new to this codebase, Apologies if I misunderstood the use of constructs and why they are implemented in the way they are.
1. booltest_atomic_xchg_verify_int(size_t size, cl_int *refValues,
2. cl_int finalValue)
3. {
4. /* For xchg, each value from 0 to size - 1 should have an entry in the ref5. * array, and ONLY one entry */6. char *valids;
7. size_t i;
8. char originalValidCount = 0;
9.
10. valids = (char *)malloc(sizeof(char) * size);
11. memset(valids, 0, sizeof(char) * size);
12.
13. for (i = 0; i < size; i++)
14. {
15. if (refValues[i] == INT_TEST_VALUE)
16. {
17. // Special initial value18. originalValidCount++;
19. continue;
20. }
21. if (refValues[i] < 0 || (size_t)refValues[i] >= size)
22. {
23. log_error(
24. "ERROR: Reference value %zu outside of valid range! (%d)\n", i,
25. refValues[i]);
26. returnfalse;
27. }
28. valids[refValues[i]]++;
29. }
30.
31. /* Note: ONE entry will have zero count. It'll be the last one that32. executed, because that value should be the final value outputted */33. if (valids[finalValue] > 0)
34. {
35. log_error("ERROR: Final value %d was also in ref list!\n", finalValue);
36. returnfalse;
37. }
38. else39. valids[finalValue] = 1; // So the following loop will be okay40.
41. /* Now check that every entry has one and only one count */42. if (originalValidCount != 1)
43. {
44. log_error("ERROR: Starting reference value %d did not occur "45. "once-and-only-once (occurred %d)\n",
46. 65191, originalValidCount);
47. returnfalse;
48. }
49. for (i = 0; i < size; i++)
50. {
51. if (valids[i] != 1)
52. {
53. log_error("ERROR: Reference value %zu did not occur "54. "once-and-only-once (occurred %d)\n",
55. i, valids[i]);
56. for (size_t j = 0; j < size; j++)
57. log_info("%d: %d\n", (int)j, (int)valids[j]);
58. returnfalse;
59. }
60. }
61.
62. free(valids);
63. returntrue;
64. }
The text was updated successfully, but these errors were encountered:
instead of handling manually free function why are we not using unique_ptr here?
Large parts of the code base predate std::unique_ptr and haven't been modernized yet.
I understood some function are using aligned memory allocation/deallocation like free_mtdata(). So here I would like to propose to use wrapper class or custom deleter with smart pointer.
A wrapper class already exists: MTdataHolder. Some places already make use of it, but using it everywhere requires some further investment (both for making the changes and code review time).
Hi all,
I was going through
test_atomics.cpp
and found lots of memory leakage due to conditional statements(line no. 26,36,47,58).So I would like to ask, instead of handling manually free function why are we not using
unique_ptr
here?I understood some function are using aligned memory allocation/deallocation like
free_mtdata()
. So here I would like to propose to use wrapper class or custom deleter with smart pointer.char *valids
is used for incrementing at particular index(see line 6,10,28). I would to suggest to use heap allocated memory of typeint8_t
instead ofchar
for better coding practice and understanding.Attaching one function for quick overview.
@bashbaug @nikhiljnv tagging for quick response.
Disclaimer: I am new to this codebase, Apologies if I misunderstood the use of constructs and why they are implemented in the way they are.
The text was updated successfully, but these errors were encountered: