charm icon indicating copy to clipboard operation
charm copied to clipboard

LB: fix pup of CkLBOptions class

Open tvandera opened this issue 1 year ago • 4 comments

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 avatar Feb 21 '24 09:02 tvandera

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 avatar Feb 21 '24 09:02 tvandera

Plz let me squash and rebase first.

tvandera avatar Feb 27 '24 19:02 tvandera

Ready to be merged

tvandera avatar Mar 03 '24 20:03 tvandera

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

tvandera avatar Mar 14 '24 08:03 tvandera