View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0001949 | FSSCP | scripting | public | 2009-07-03 14:40 | 2009-08-07 16:52 |
| Reporter | Aardwolf | Assigned To | portej05 | ||
| Priority | normal | Severity | crash | Reproducibility | always |
| Status | resolved | Resolution | fixed | ||
| Product Version | 3.6.11 | ||||
| Summary | 0001949: Assertion in gr.drawTargetingBrackets (patch included) | ||||
| Description | An assertion was causing gr.drawTargetingBrackets to crash in Debug builds, possibly Release as well. The problem happened because g3_start_frame(0) was being called, but there were places where the function could return before getting to the matching g3_end_frame(); | ||||
| Additional Information | The patch should fix this. See attached file. | ||||
| Tags | No tags attached. | ||||
|
2009-07-03 14:40
|
targetingbrackets_crash_fix.patch (1,427 bytes)
Index: lua.cpp
===================================================================
--- lua.cpp (revision 5392)
+++ lua.cpp (working copy)
@@ -8447,11 +8447,20 @@
int bound_rc, pof;
int modelnum;
+ bool not_in_frame = !(g3_in_frame() > 0);
+
+ if( not_in_frame ) {
+ g3_start_frame(0);
+ }
+
switch ( targetp->type ) {
case OBJ_SHIP:
modelnum = Ship_info[Ships[targetp->instance].ship_info_index].model_num;
bound_rc = model_find_2d_bound_min( modelnum, &targetp->orient, &targetp->pos,&x1,&y1,&x2,&y2 );
if ( bound_rc != 0 ) {
+ if( not_in_frame ) {
+ g3_end_frame();
+ }
return ADE_RETURN_NIL;
}
break;
@@ -8459,6 +8468,9 @@
modelnum = Debris[targetp->instance].model_num;
bound_rc = submodel_find_2d_bound_min( modelnum, Debris[targetp->instance].submodel_num, &targetp->orient, &targetp->pos,&x1,&y1,&x2,&y2 );
if ( bound_rc != 0 ) {
+ if( not_in_frame ) {
+ g3_end_frame();
+ }
return ADE_RETURN_NIL;
}
break;
@@ -8487,15 +8499,11 @@
y1 -= padding;
y2 += padding;
if ( draw_box ) {
- if( !(g3_in_frame() > 0) ) {
- g3_start_frame(0);
- draw_brackets_square(x1, y1, x2, y2, false);
- g3_end_frame();
- }
- else {
- draw_brackets_square(x1, y1, x2, y2, false);
- }
+ draw_brackets_square(x1, y1, x2, y2, false);
}
+ if( not_in_frame ) {
+ g3_end_frame();
+ }
return ade_set_args(L, "iiii", x1, y1, x2, y2);
}
|
|
|
Patch from Aardwolf modified slightly and committed. Aardwolf reports patch works as intended. |
|
|
No additional feedback? |
|
|
I believe not - closing. This appears to be fixed. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2009-07-03 14:40 | Aardwolf | New Issue | |
| 2009-07-03 14:40 | Aardwolf | Status | new => assigned |
| 2009-07-03 14:40 | Aardwolf | Assigned To | => WMCoolmon |
| 2009-07-03 14:40 | Aardwolf | File Added: targetingbrackets_crash_fix.patch | |
| 2009-07-03 14:48 | portej05 | Assigned To | WMCoolmon => |
| 2009-07-03 14:48 | portej05 | Status | assigned => new |
| 2009-07-03 15:35 | portej05 | Status | new => assigned |
| 2009-07-03 15:35 | portej05 | Assigned To | => portej05 |
| 2009-07-03 15:36 | portej05 | Note Added: 0011034 | |
| 2009-07-03 15:36 | portej05 | Status | assigned => feedback |
| 2009-08-06 21:24 | Aardwolf | Note Added: 0011125 | |
| 2009-08-07 16:52 | portej05 | Status | feedback => resolved |
| 2009-08-07 16:52 | portej05 | Resolution | open => fixed |
| 2009-08-07 16:52 | portej05 | Note Added: 0011128 |