View Issue Details

IDProjectCategoryView StatusLast Update
0004078Spring engineGeneralpublic2013-10-23 20:11
Reporterabma Assigned ToKloot  
PrioritynormalSeveritymajorReproducibilityhave not tried
Status resolvedResolutionfixed 
Product Version94.1.1+git 
Target Version95.0 
Summary0004078: SIGFPE on zoom-in/out
Descriptiongot an SIGFPE when zooming in...
Additional Information[f=0004232] Error: Floating point exception (SIGFPE) in spring 94.1.1-1410-gfed2e04 develop (Debug)
[f=0004232] Error: Stacktrace:
[f=0004232] Error: <0> /lib/x86_64-linux-gnu/libpthread.so.0(+0xfbb0) [0x7fc35fea3bb0]
[f=0004232] Error: <1> /home/abma/dev/spring/develop/rts/System/FastMath.h:284 (discriminator 1)
[f=0004232] Error: <2> /home/abma/dev/spring/develop/rts/Game/TraceRay.cpp:295 (discriminator 1)
[f=0004232] Error: <3> /home/abma/dev/spring/develop/rts/Rendering/Env/ISky.cpp:94
[f=0004232] Error: <4> /home/abma/dev/spring/develop/rts/Rendering/Env/AdvSky.cpp:547
[f=0004232] Error: <5> /usr/include/c++/4.8/bits/stl_tree.h:1346
[f=0004232] Error: <6> /home/abma/dev/spring/develop/rts/Game/Game.cpp:1261
[f=0004232] Error: <7> /home/abma/dev/spring/develop/rts/Map/SMF/ROAM/Patch.h:98 (discriminator 1)
[f=0004232] Error: <8> /usr/include/c++/4.8/bits/stl_vector.h:317
[f=0004232] Error: <9> /usr/include/c++/4.8/bits/basic_string.tcc:658
[f=0004232] Error: <10> /usr/include/c++/4.8/bits/allocator.h:119
[f=0004232] Error: <11> /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7fc35ca4bde5]
[f=0004232] Error: <12> ??:?
TagsNo tags attached.
Attached Files
infolog.txt (Attachment missing)
Checked infolog.txt for Errors

Activities

abma

2013-10-23 19:03

administrator   ~0011828

seems to be reproduceable when zooming max out and then zooming very fast in while holding CTRL + SHIFT.

abma

2013-10-23 19:05

administrator   ~0011829

(gdb) bt full
#0 0x00000000005b5db1 in fastmath::floor<float> (f=@0x7fffffffdbb0: 2,2999616e+09)
    at rts/System/FastMath.h:284
No locals.
#1 0x00000000006148a9 in TraceRay::GuiTraceRay (start=..., dir=..., length=55199,0781,
    exclude=0x0, hitUnit=@0x7fffffffdc60: 0x0, hitFeature=@0x7fffffffdc68: 0x0, useRadar=false,
    groundOnly=true, ignoreWater=false) at rts/Game/TraceRay.cpp:295
        minEgressDist = 4,59163468e-41
        begQuad = 0x1bba350
        endQuad = 0x7fffebfe6fe0 <typeinfo for exec_node>
        fi = {_M_node = 0x1d08210}
        guiRayLength = 55199,0781
        groundRayLength = -1
        waterRayLength = 0
        minIngressDist = -8,44844719e+26
        minRayLength = 0
        hitFactory = false
        cq = {b0 = 0, b1 = 1, t0 = 5,42789485e-38, t1 = 0, p0 = {static binder = {
              class_ = 0x19d18c0, base = 0x0, flags = creg::CF_None,
              memberRegistrator = 0x193c4c0 <float3::memberRegistrator>,
              name = 0x127c60e "float3", size = 12, alignment = 4, hasVTable = false,
              constructor = 0xcb108a <float3::_ConstructInstance(void*)>,
              destructor = 0xcb10b6 <float3::_DestructInstance(void*)>,
              nextBinder = 0x193c440 <type2<float>::binder>}, static memberRegistrator =
    0x193c5a8 <float3mreg>, static hasVTable = false, static CMP_EPS = 9,99999975e-05,
---Type <return> to continue, or q <return> to quit---
            static NORMALIZE_EPS = 9,99999996e-13, static maxxpos = 19455, static maxzpos = 9215, {
              {x = -nan(0x7fdbb0), y = 4,59163468e-41, z = 8,02330391e-39}, {r = -nan(0x7fdbb0),
                g = 4,59163468e-41, b = 8,02330391e-39}, {x1 = -nan(0x7fdbb0),
                y1 = 4,59163468e-41, x2 = 8,02330391e-39}, {s = -nan(0x7fdbb0),
                t = 4,59163468e-41, p = 8,02330391e-39}, {xstart = -nan(0x7fdbb0),
                ystart = 4,59163468e-41, xend = 8,02330391e-39}}}, p1 = {static binder = {
              class_ = 0x19d18c0, base = 0x0, flags = creg::CF_None,
              memberRegistrator = 0x193c4c0 <float3::memberRegistrator>,
              name = 0x127c60e "float3", size = 12, alignment = 4, hasVTable = false,
              constructor = 0xcb108a <float3::_ConstructInstance(void*)>,
              destructor = 0xcb10b6 <float3::_DestructInstance(void*)>,
              nextBinder = 0x193c440 <type2<float>::binder>},
            static memberRegistrator = 0x193c5a8 <float3mreg>, static hasVTable = false,
            static CMP_EPS = 9,99999975e-05, static NORMALIZE_EPS = 9,99999996e-13,
            static maxxpos = 19455, static maxzpos = 9215, {{x = 0, y = 2,22463597e-36, z = 0}, {
                r = 0, g = 2,22463597e-36, b = 0}, {x1 = 0, y1 = 2,22463597e-36, x2 = 0}, {s = 0,
                t = 2,22463597e-36, p = 0}, {xstart = 0, ystart = 2,22463597e-36, xend = 0}}},
          lmp = 0x4283590}
        ui = {_M_node = 0x1bbb300}
#2 0x00000000008ad42e in ISky::SunVisible (this=0x4e54210, pos=...)
    at rts/Rendering/Env/ISky.cpp:94
        hitUnit = 0x0
        hitFeature = 0x0
        sunDir = {static binder = {class_ = 0x19d18c0, base = 0x0, flags = creg::CF_None,
---Type <return> to continue, or q <return> to quit---
            memberRegistrator = 0x193c4c0 <float3::memberRegistrator>, name = 0x127c60e "float3",
            size = 12, alignment = 4, hasVTable = false,
            constructor = 0xcb108a <float3::_ConstructInstance(void*)>,
            destructor = 0xcb10b6 <float3::_DestructInstance(void*)>,
            nextBinder = 0x193c440 <type2<float>::binder>},
          static memberRegistrator = 0x193c5a8 <float3mreg>, static hasVTable = false,
          static CMP_EPS = 9,99999975e-05, static NORMALIZE_EPS = 9,99999996e-13,
          static maxxpos = 19455, static maxzpos = 9215, {{x = 0,577349603, y = 0,577349603,
              z = 0,577349603}, {r = 0,577349603, g = 0,577349603, b = 0,577349603}, {
              x1 = 0,577349603, y1 = 0,577349603, x2 = 0,577349603}, {s = 0,577349603,
              t = 0,577349603, p = 0,577349603}, {xstart = 0,577349603, ystart = 0,577349603,
              xend = 0,577349603}}}
        sunDist = 0
0000003 0x0000000000893127 in CAdvSky::DrawSun (this=0x4e54210) at rts/Rendering/Env/AdvSky.cpp:547
        modSunColor = {static binder = {class_ = 0x19d18c0, base = 0x0, flags = creg::CF_None,
            memberRegistrator = 0x193c4c0 <float3::memberRegistrator>, name = 0x127c60e "float3",
            size = 12, alignment = 4, hasVTable = false,
            constructor = 0xcb108a <float3::_ConstructInstance(void*)>,
            destructor = 0xcb10b6 <float3::_DestructInstance(void*)>,
            nextBinder = 0x193c440 <type2<float>::binder>},
          static memberRegistrator = 0x193c5a8 <float3mreg>, static hasVTable = false,
          static CMP_EPS = 9,99999975e-05, static NORMALIZE_EPS = 9,99999996e-13,
          static maxxpos = 19455, static maxzpos = 9215, {{x = 0,800000012, y = 0,
              z = -nan(0x7fe450)}, {r = 0,800000012, g = 0, b = -nan(0x7fe450)}, {
---Type <return> to continue, or q <return> to quit---
              x1 = 0,800000012, y1 = 0, x2 = -nan(0x7fe450)}, {s = 0,800000012, t = 0,
              p = -nan(0x7fe450)}, {xstart = 0,800000012, ystart = 0, xend = -nan(0x7fe450)}}}
        ffy = -nan(0x7fdde0)
        cvs0 = 0x43d4048
        bf1 = 0x400000000 <Address 0x400000000 out of bounds>
        xzSunCameraPos = {static binder = {class_ = 0x19d18c0, base = 0x0, flags = creg::CF_None,
            memberRegistrator = 0x193c4c0 <float3::memberRegistrator>, name = 0x127c60e "float3",
            size = 12, alignment = 4, hasVTable = false,
            constructor = 0xcb108a <float3::_ConstructInstance(void*)>,
            destructor = 0xcb10b6 <float3::_DestructInstance(void*)>,
            nextBinder = 0x193c440 <type2<float>::binder>},
          static memberRegistrator = 0x193c5a8 <float3mreg>, static hasVTable = false,
          static CMP_EPS = 9,99999975e-05, static NORMALIZE_EPS = 9,99999996e-13,
          static maxxpos = 19455, static maxzpos = 9215, {{x = 205044320, y = 2,21886928e-27,
              z = 2,31146572e-36}, {r = 205044320, g = 2,21886928e-27, b = 2,31146572e-36}, {
              x1 = 205044320, y1 = 2,21886928e-27, x2 = 2,31146572e-36}, {s = 205044320,
              t = 2,21886928e-27, p = 2,31146572e-36}, {xstart = 205044320,
              ystart = 2,21886928e-27, xend = 2,31146572e-36}}}
        ymod = 5,42789485e-38
        baseX = 32767
        cvs1 = 0xf5750
        bf2 = 0x7fffffffddd0 "}\t"
        buf = '\000' <repeats 55 times>, "\003", '\000' <repeats 31 times>, "\002", '\000' <repeats 39 times>
---Type <return> to continue, or q <return> to quit---
        fx = 5,42789037e-38
        cvs2 = 0x7fffffffdd60
        fy = 0
        ffx = 0
        baseY = -8944
        cvs3 = 0xcaaedc <ScopedTimer::~ScopedTimer()+160>
        mid = 0
0000004 0x00000000009b94a1 in CWorldDrawer::Draw (this=0x5fe2b10) at rts/Rendering/WorldDrawer.cpp:210
        myScopedTimerFromMakro = {<BasicTimer> = {<boost::noncopyable_::noncopyable> = {<No data fields>}, hash = 1783, starttime = {static binder = {class_ = 0x19d1c40, base = 0x0,
                flags = creg::CF_None,
                memberRegistrator = 0x19396e0 <spring_time::memberRegistrator>,
                name = 0x126c51b "spring_time", size = 8, alignment = 8, hasVTable = false,
                constructor = 0xc5564c <spring_time::_ConstructInstance(void*)>,
                destructor = 0xc55678 <spring_time::_DestructInstance(void*)>,
                nextBinder = 0x1939600 <CRectangleOptimizer::binder>},
              static memberRegistrator = 0x1939770 <spring_timemreg>, static hasVTable = false,
              x = 1382547929466200032, static xs = 1382547891744125066}, nameIterator = {
              _M_node = 0x4247cd0}}, autoShowGraph = false, it = {_M_node = 0x3be6130}}
        gd = 0x7efcce0
        plane_below = {0, -1, 0, 0}
        plane_above = {0, 1, 0, 0}
0000005 0x000000000059b22a in CGame::Draw (this=0x21dbf60) at rts/Game/Game.cpp:1261
        currentTimePreUpdate = {static binder = {class_ = 0x19d1c40, base = 0x0,
---Type <return> to continue, or q <return> to quit---
            flags = creg::CF_None, memberRegistrator = 0x19396e0 <spring_time::memberRegistrator>,
            name = 0x126c51b "spring_time", size = 8, alignment = 8, hasVTable = false,
            constructor = 0xc5564c <spring_time::_ConstructInstance(void*)>,
            destructor = 0xc55678 <spring_time::_DestructInstance(void*)>,
            nextBinder = 0x1939600 <CRectangleOptimizer::binder>},
          static memberRegistrator = 0x1939770 <spring_timemreg>, static hasVTable = false,
          x = 1382547929463889985, static xs = 1382547891744125066}
        doDrawWorld = true
        __PRETTY_FUNCTION__ = "virtual bool CGame::Draw()"
        currentTimePreDraw = {static binder = {class_ = 0x19d1c40, base = 0x0,
            flags = creg::CF_None, memberRegistrator = 0x19396e0 <spring_time::memberRegistrator>,
            name = 0x126c51b "spring_time", size = 8, alignment = 8, hasVTable = false,
            constructor = 0xc5564c <spring_time::_ConstructInstance(void*)>,
            destructor = 0xc55678 <spring_time::_DestructInstance(void*)>,
            nextBinder = 0x1939600 <CRectangleOptimizer::binder>},
          static memberRegistrator = 0x1939770 <spring_timemreg>, static hasVTable = false,
          x = 1382547929464444330, static xs = 1382547891744125066}
        myScopedTimerFromMakro = {<BasicTimer> = {<boost::noncopyable_::noncopyable> = {<No data fields>}, hash = 26460840, starttime = {static binder = {class_ = 0x19d1c40, base = 0x0,
                flags = creg::CF_None,
                memberRegistrator = 0x19396e0 <spring_time::memberRegistrator>,
                name = 0x126c51b "spring_time", size = 8, alignment = 8, hasVTable = false,
                constructor = 0xc5564c <spring_time::_ConstructInstance(void*)>,
                destructor = 0xc55678 <spring_time::_DestructInstance(void*)>,
---Type <return> to continue, or q <return> to quit---
                nextBinder = 0x1939600 <CRectangleOptimizer::binder>},
              static memberRegistrator = 0x1939770 <spring_timemreg>, static hasVTable = false,
              x = 140737488347264, static xs = 1382547891744125066}, nameIterator = {
              _M_node = 0x7fffffffe090}}, autoShowGraph = 217, it = {_M_node = 0x193c2a8 <refs+8>}}
        currentTimePostDraw = {static binder = {class_ = 0x19d1c40, base = 0x0,
            flags = creg::CF_None, memberRegistrator = 0x19396e0 <spring_time::memberRegistrator>,
            name = 0x126c51b "spring_time", size = 8, alignment = 8, hasVTable = false,
            constructor = 0xc5564c <spring_time::_ConstructInstance(void*)>,
            destructor = 0xc55678 <spring_time::_DestructInstance(void*)>,
            nextBinder = 0x1939600 <CRectangleOptimizer::binder>},
          static memberRegistrator = 0x1939770 <spring_timemreg>, static hasVTable = false,
          x = 140737488347032, static xs = 1382547891744125066}
#6 0x0000000000c7d19d in SpringApp::Update (this=0x7fffffffe280) at rts/System/SpringApp.cpp:964
        cputimer = {<BasicTimer> = {<boost::noncopyable_::noncopyable> = {<No data fields>},
            hash = 1972, starttime = {static binder = {class_ = 0x19d1c40, base = 0x0,
                flags = creg::CF_None,
                memberRegistrator = 0x19396e0 <spring_time::memberRegistrator>,
                name = 0x126c51b "spring_time", size = 8, alignment = 8, hasVTable = false,
                constructor = 0xc5564c <spring_time::_ConstructInstance(void*)>,
                destructor = 0xc55678 <spring_time::_DestructInstance(void*)>,
                nextBinder = 0x1939600 <CRectangleOptimizer::binder>},
              static memberRegistrator = 0x1939770 <spring_timemreg>, static hasVTable = false,
              x = 1382547929463887177, static xs = 1382547891744125066}, nameIterator = {
              _M_node = 0x1e8b520}}, autoShowGraph = false, it = {_M_node = 0x1e8a480}}
---Type <return> to continue, or q <return> to quit---
        ret = 1
#7 0x0000000000c7d3f8 in SpringApp::Run (this=0x7fffffffe280) at rts/System/SpringApp.cpp:1041
No locals.
#8 0x0000000000c4db1a in Run (argc=1, argv=0x7fffffffe458) at rts/System/Main.cpp:64
        app = {cmdline = 0x19bd3e0}
        ret = -1
        err = 0x19bcba0
#9 0x0000000000c4e209 in main (argc=1, argv=0x7fffffffe458) at rts/System/Main.cpp:123
        restart = false

abma

2013-10-23 19:08

administrator   ~0011830

holding CTRL only leads to SIGFPE as well, but when holding SHIFT+CTRL its easier to get the SIGFPE...

Kloot

2013-10-23 19:29

developer   ~0011831

Last edited: 2013-10-23 19:30

cq = {... p0 = ... {x = -nan(0x7fdbb0) ... }

What camera mode(s) trigger(s) this and on what map(s)? Does it happen when zooming in extremely close to units or features or also when there is only empty ground?


Seems there are a few unrelated NaN sources as well:

modSunColor = { ... z = -nan(0x7fe450)}
ffy = -nan(0x7fdde0) // fy - math::floor(fy)

abma

2013-10-23 19:44

administrator   ~0011832

Overhead (TA) style camera, didn't test others yet.


not sure if a unit in view affects it, seems to crash with and without in view, but didn't crash when zoomed very closely to map.

abma

2013-10-23 19:45

administrator   ~0011833

(crash = SIGFPE this time)

Kloot

2013-10-23 19:46

developer   ~0011834

Last edited: 2013-10-23 19:47

what map(s)?

abma

2013-10-23 19:49

administrator   ~0011835

Using map: Altored_Earth

abma

2013-10-23 19:52

administrator   ~0011836

no SIGFPE's on other (smaller) maps it seems

Kloot

2013-10-23 19:55

developer   ~0011837

Can't reproduce here on that map, maybe zoom-speed isn't high enough. Also, for me pressing CTRL with overhead camera controls the viewing angle, it does not affect speed.

abma

2013-10-23 19:58

administrator   ~0011838

oops, yes CTRL changes view angel for me too. wasn't clear as in the first tries it instantly SIGFPE'd.

SHIFT speeds changing view angel a little up for me.

i'm using a debug build, so maybe this gives the needed slowdown to reproduce this.

Kloot

2013-10-23 20:07

developer   ~0011839

Last edited: 2013-10-23 20:10

Ah, this line

  const float waterRayLength = math::floor(math::fabs(start.y / std::min(dir.y, -0.00001f)))

generates an FPE when

  start.y = 21481.2246f (possible only on larger maps)
  dir.y = 0.577349603f

since

floor(abs(21481.2246f / min(0.577349603f, -0.00001f))) ==
floor(abs(21481.2246f / -0.00001f)) ==
floor(abs(-2e+09)) ==
floor(2e+09) ==
10752 (!)

causes an overflow during float to int conversion.

Issue History

Date Modified Username Field Change
2013-10-23 19:02 abma New Issue
2013-10-23 19:03 abma Note Added: 0011828
2013-10-23 19:05 abma Note Added: 0011829
2013-10-23 19:08 abma Note Added: 0011830
2013-10-23 19:29 Kloot Note Added: 0011831
2013-10-23 19:30 Kloot Note Edited: 0011831
2013-10-23 19:44 abma Note Added: 0011832
2013-10-23 19:45 abma Note Added: 0011833
2013-10-23 19:46 Kloot Note Added: 0011834
2013-10-23 19:47 Kloot Note Edited: 0011834
2013-10-23 19:48 abma File Added: infolog.txt
2013-10-23 19:49 abma Note Added: 0011835
2013-10-23 19:52 abma Note Added: 0011836
2013-10-23 19:55 Kloot Note Added: 0011837
2013-10-23 19:58 abma Note Added: 0011838
2013-10-23 20:07 Kloot Note Added: 0011839
2013-10-23 20:08 Kloot Note Edited: 0011839
2013-10-23 20:10 Kloot Note Edited: 0011839
2013-10-23 20:11 Kloot Changeset attached => spring develop e8326232
2013-10-23 20:11 Kloot Assigned To => Kloot
2013-10-23 20:11 Kloot Status new => resolved
2013-10-23 20:11 Kloot Resolution open => fixed