Viewing Issue Simple Details Jump to Notes ] Wiki ] View Advanced ] Issue History ] Print ]
ID Category Severity Reproducibility Date Submitted Last Update
0007445 [DCSS] Bug Report crash sometimes 2013-08-08 15:45 2013-09-15 20:31
Reporter KiloByte View Status public  
Assigned To neil
Priority normal Resolution done  
Status resolved   Product Branch 0.13 ancient branch
Summary 0007445: crash in wind drake breath tracer
Description Here's a repeating (albeit only every several core-days) crash from stress testing. I got an -Og working core dump, if needed.
Additional Information
Tags No tags attached.
Attached Files txt file icon crash-Abyss_walker-20130808-030435.txt [^] (61,327 bytes) 2013-08-08 15:45 [Show Content]
? file icon bt [^] (12,182 bytes) 2013-08-24 03:49

- Relationships

-  Notes
(0023697)
neil (administrator)
2013-08-10 05:38

I thought I fixed this in 0.13-a0-1320-g8311199, but apparently that wasn't the real problem. See also http://dobrazupa.org/morgue/NOPE/crash-NOPE-20130531-015051.txt [^]
(0023846)
KiloByte (manager)
2013-08-24 03:50

A belated backtrace, sorry for the delay.
(0023847)
neil (administrator)
2013-08-24 05:57
edited on: 2013-08-24 06:10

We are reusing wind_beam and don't manually reset aim_at_feet, so if the target is ever the caster it will crash on the next target. Just resetting aimed_at_feet is probably not enough, because initialise_fire() also turns on aimed_at_spot and auto_hit. On the other hand, those can't be turned off by initialise_fire() because they might have been turned on by the caller.

This loop (the last in wind_blast()) looks suspicious: I'm not convinced *di will never be the agent's position. Also, the call to you.pos() looks wrong (the other similar loop uses agent->pos())

                   for (distance_iterator di(wind_beam.path_taken[j],
                         false, true, 1); di; ++di)
                    {
                        if (di->distance_from(agent->pos())
                            == newpos.distance_from(you.pos())
                            && !feat_is_solid(grd(*di))
                            && env.cgrid(*di) == EMPTY_CLOUD)
                        {
                            swap_clouds(*di, wind_beam.path_taken[j]);
                            --push;
                            wind_beam.target = *di;
                            wind_beam.fire();
                            j--;
                            break;
                        }
                    }



(0023848)
neil (administrator)
2013-08-24 07:13

Hopefully this is fixed in 0.13-a0-2778-g5436301 . Not closing because I haven't run the stress tests and haven't reproduced the bug otherwise.
(0023949)
neil (administrator)
2013-08-31 00:36
edited on: 2013-08-31 00:37

That fix had a bug (the code was the opposite of the intended logic, though it might have covered up many instances of the bug anyway). Re-fixed in 0.13-a0-2907-g70ca29e .

(0024025)
neil (administrator)
2013-09-15 20:31

Tentative closing this, since it seems not to have appeared online since the fixes referenced above. Re-open if it occurs again.

- Issue History
Date Modified Username Field Change
2013-08-08 15:45 KiloByte New Issue
2013-08-08 15:45 KiloByte File Added: crash-Abyss_walker-20130808-030435.txt
2013-08-08 22:16 KiloByte Summary crash in wind drake breath cracer => crash in wind drake breath tracer
2013-08-10 05:38 neil Note Added: 0023697
2013-08-24 03:49 KiloByte File Added: bt
2013-08-24 03:50 KiloByte Note Added: 0023846
2013-08-24 05:57 neil Note Added: 0023847
2013-08-24 06:10 neil Note Edited: 0023847
2013-08-24 07:13 neil Note Added: 0023848
2013-08-31 00:36 neil Note Added: 0023949
2013-08-31 00:37 neil Note Edited: 0023949
2013-09-15 20:31 neil Note Added: 0024025
2013-09-15 20:31 neil Status new => resolved
2013-09-15 20:31 neil Fixed in Branch => 0.13 development branch
2013-09-15 20:31 neil Resolution open => done
2013-09-15 20:31 neil Assigned To => neil


Mantis 1.1.8[^]
Copyright © 2000 - 2009 Mantis Group
Powered by Mantis Bugtracker