During testing #229 I noticed that at least on Windows a lot of the integration tests segfault, when shutting down. I traced it down that the access to the RTDE's DataPackage's static g_type_list gets destructed before the communication is shutdown / the other objects are destroyed. This leads to a segfault in
|
if (g_type_list.find(item) != g_type_list.end()) |
which is executed for an incoming package while the type list doesn't exist anymore.
To reproduce this, e.g. run the SplineInterpolation integration tests. The tests may succeed, but when shutting down the tests it segfaults
Possible mitigation:
- destroying the RobotWrapper object in
TearDownTestSuite seems to bypass that problem. That seems like a workaround, however.
- Have the lookup table in another form than the static member map
- Refactor dataflow. Why do we need to create the package structure for every parsing operation? It should be enough to initialize the structure once and re-use that package.
During testing #229 I noticed that at least on Windows a lot of the integration tests segfault, when shutting down. I traced it down that the access to the RTDE's
DataPackage's staticg_type_listgets destructed before the communication is shutdown / the other objects are destroyed. This leads to a segfault inUniversal_Robots_Client_Library/src/rtde/data_package.cpp
Line 590 in 44b650f
which is executed for an incoming package while the type list doesn't exist anymore.
To reproduce this, e.g. run the
SplineInterpolationintegration tests. The tests may succeed, but when shutting down the tests it segfaultsPossible mitigation:
TearDownTestSuiteseems to bypass that problem. That seems like a workaround, however.