charmplusplus / charm

The Charm++ parallel programming system. Visit https://charmplusplus.org/ for more information.
Apache License 2.0
199 stars 50 forks source link

LB: fix pup of CkLBOptions class #3781

Closed tvandera closed 3 months ago

tvandera commented 4 months ago

I was testing some charm4py examples and noticing segfaults in TreeLB::loadConfigFile(CkLBOptions const&).

Possibly due to the invalid const char *-pupping of legacyName in CkLBOptions:

// used in constructor of all load balancers
class CkLBOptions
{
 private:
  int seqno;  // for centralized lb, the seqno
  const char* legacyName;
 public:
  CkLBOptions() : seqno(-1), legacyName(nullptr) {}
  CkLBOptions(int s) : seqno(s), legacyName(nullptr) {}
  CkLBOptions(int s, const char* legacyName) : seqno(s), legacyName(legacyName) {}
  int getSeqNo() const { return seqno; }
  const char* getLegacyName() const { return legacyName; }
};
PUPbytes(CkLBOptions)

A proposed fix in this PR

tvandera commented 4 months ago

Full stack-trace for reference:

0   libsystem_platform.dylib               0x18393adc4 _platform_strlen + 4
1   libcharm.dylib                         0x11cc03648 std::__1::__constexpr_strlen[abi:v160006](char const*) + 24
2   libcharm.dylib                         0x11cc03548 std::__1::char_traits<char>::length(char const*) + 24
3   libcharm.dylib                         0x11cc034cc std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>::basic_string[abi:v160006]<std::nullptr_t>(char const*) + 56
4   libcharm.dylib                         0x11cc0335c std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>::basic_string[abi:v160006]<std::nullptr_t>(char const*) + 36
5   libcharm.dylib                         0x11ccfc848 void std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>::construct[abi:v160006]<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, char const* const&>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, char const* const&) + 40
6   libcharm.dylib                         0x11ccfc660 void std::__1::allocator_traits<std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>>::construct[abi:v160006]<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, char const* const&, void>(std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, char const* const&) + 40
7   libcharm.dylib                         0x11ccfc56c std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>* nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>::create<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, char const* const&>(char const* const&) + 100
8   libcharm.dylib                         0x11ccfc4ec void nlohmann::detail::external_constructor<(nlohmann::detail::value_t)3>::construct<nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>, char const*, 0>(nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>&, char const* const&) + 40
9   libcharm.dylib                         0x11ccfc4b8 void nlohmann::detail::to_json<nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>, char const*, 0>(nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>&, char const* const&) + 32
10  libcharm.dylib                         0x11ccfc48c decltype(to_json(fp, std::forward<char const*>(fp0)), (void)()) nlohmann::detail::to_json_fn::operator()<nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>, char const*>(nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>&, char const*&&) const + 36
11  libcharm.dylib                         0x11ccfc45c decltype(nlohmann::(anonymous namespace)::to_json(fp, std::forward<char const*>(fp0)), (void)()) nlohmann::adl_serializer<char const*, void>::to_json<nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>, char const*>(nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>&, char const*&&) + 40
12  libcharm.dylib                         0x11ccfc41c nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>::basic_json<char const*, char const*, 0>(char const*&&) + 44
13  libcharm.dylib                         0x11ccfc3e0 nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>::basic_json<char const*, char const*, 0>(char const*&&) + 36
14  libcharm.dylib                         0x11ccfc39c nlohmann::detail::json_ref<nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>>::json_ref<char const*, 0>(char const*&&) + 36
15  libcharm.dylib                         0x11ccab234 nlohmann::detail::json_ref<nlohmann::basic_json<std::__1::map, std::__1::vector, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, bool, long long, unsigned long long, double, std::__1::allocator, nlohmann::adl_serializer, std::__1::vector<unsigned char, std::__1::allocator<unsigned char>>>>::json_ref<char const*, 0>(char const*&&) + 36
16  libcharm.dylib                         0x11cca9ea4 TreeLB::loadConfigFile(CkLBOptions const&) + 220
17  libcharm.dylib                         0x11ccb04a8 TreeLB::TreeLB(CkLBOptions const&) + 300
18  libcharm.dylib                         0x11ccb00f8 CkIndex_TreeLB::_call_TreeLB_marshall1(void*, void*) + 184
19  libcharm.dylib                         0x11cd4c4a4 CkDeliverMessageFree + 128
20  libcharm.dylib                         0x11cd4d348 _invokeEntryNoTrace(int, envelope*, void*) + 192
21  libcharm.dylib                         0x11cd4d018 CkCreateLocalGroup + 648
22  libcharm.dylib                         0x11cd4e914 _processBocInitMsg(CkCoreState*, envelope*) + 112
23  libcharm.dylib                         0x11ce77a00 _processBufferedBocInits() + 244
24  libcharm.dylib                         0x11ce775fc _initDone() + 148
25  libcharm.dylib                         0x11ce77c24 checkForInitDone(bool) + 172
26  libcharm.dylib                         0x11ce7a16c _initHandler(void*, CkCoreState*) + 1020
27  libcharm.dylib                         0x11ce97cc8 CmiHandleMessage + 180
28  libcharm.dylib                         0x11ce98038 CsdScheduleForever + 248
29  libcharm.dylib                         0x11ce97d24 CsdScheduler + 40
30  libcharm.dylib                         0x11cf51e24 ConverseRunPE(int) + 284
31  libcharm.dylib                         0x11cf515f8 ConverseInit + 1752
32  libcharm.dylib                         0x11cd52ce0 StartCharmExt + 308
33  libffi.dylib                           0x194482050 ffi_call_SYSV + 80
34  libffi.dylib                           0x19448aadc ffi_call_int + 1208
35  _ctypes.cpython-310-darwin.so          0x1031e87b4 _ctypes_callproc + 856
36  _ctypes.cpython-310-darwin.so          0x1031e3454 PyCFuncPtr_call + 216
37  Python                                 0x102deefc0 _PyObject_MakeTpCall + 136
38  Python                                 0x102ec9880 call_function + 272
39  Python                                 0x102ec3f60 _PyEval_EvalFrameDefault + 23108
40  Python                                 0x102ebd658 _PyEval_Vector + 396
41  Python                                 0x102ec97f0 call_function + 128
42  Python                                 0x102ec2b04 _PyEval_EvalFrameDefault + 17896
43  Python                                 0x102ebd658 _PyEval_Vector + 396
44  Python                                 0x102ec97f0 call_function + 128
45  Python                                 0x102ec2b04 _PyEval_EvalFrameDefault + 17896
46  Python                                 0x102ebd658 _PyEval_Vector + 396
47  Python                                 0x102ebd4b8 PyEval_EvalCode + 104
48  Python                                 0x102f0b070 run_eval_code_obj + 84
49  Python                                 0x102f0afd4 run_mod + 112
50  Python                                 0x102f0adf8 pyrun_file + 148
51  Python                                 0x102f0a848 _PyRun_SimpleFileObject + 268
52  Python                                 0x102f0a204 _PyRun_AnyFileObject + 216
53  Python                                 0x102f253a8 pymain_run_file_obj + 220
54  Python                                 0x102f24cec pymain_run_file + 72
55  Python                                 0x102f246c0 Py_RunMain + 976
56  Python                                 0x102f256ec Py_BytesMain + 40
57  dyld                                   0x18358d0e0 start + 2360
tvandera commented 4 months ago

Plz let me squash and rebase first.

tvandera commented 4 months ago

Ready to be merged

tvandera commented 3 months ago

Anything I need to do here? Seems the tests run over the 1hr limit of GitHub actions?