mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-05 10:47:27 -04:00
Detect and replace NaNs in cXyz default ctor
This fixes intermittent segfaults due to invalid atan table lookups. For some reason zero-initializing all cXyz objects causes issues, as does initializing them with INFINITY or -INFINITY. However, at least one of the possible crashes (in d_a_e_yg's search_ground_1) is guaranteed to happen whenever a specific uninitialized cXyz contains a NaN for x or z. A possible explanation for these crashes not occurring on hardware might be that the problematic objects happen to be placed at memory locations that happen to never contain a NaN upon allocation, so the buggy code was never caught. Further investigation would be needed to determine if this is what's actually happening, though.
This commit is contained in:
@@ -31,7 +31,17 @@ struct cXyz : Vec {
|
||||
z = vec.z;
|
||||
}
|
||||
#else
|
||||
cXyz() = default;
|
||||
cXyz() {
|
||||
if (std::isnan(x)) {
|
||||
x = 0.0f;
|
||||
}
|
||||
if (std::isnan(y)) {
|
||||
y = 0.0f;
|
||||
}
|
||||
if (std::isnan(z)) {
|
||||
z = 0.0f;
|
||||
}
|
||||
}
|
||||
~cXyz() = default;
|
||||
cXyz(const cXyz& vec) = default;
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user