View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000441 | LDMud 3.3 | Compilation, Installation | public | 2006-01-06 20:35 | 2018-01-29 21:57 |
Reporter | Gnomi | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | i686 | OS | Debian GNU/Linux | OS Version | 3.1 |
Product Version | 3.3.712 | ||||
Fixed in Version | 3.3.713 | ||||
Summary | 0000441: The tracedepth is not counted correctly | ||||
Description | Hi, I found two problems with the tracedepth counting. (I looked for it, because I got a trace with a tracedepth of up to -3659. This was the reason for a comm_fatal because of a too long message.) In interpret.c int_call_lambda() creates for efun-closures a little program for the instruction with a return in it and calls it directly (without setup_new_frame). Because the return instruction decreases tracedepth, it has to be increased by one before calling eval_instruction. In simulate.c execute_callback() uses apply() wich sets the tracedepth to zero. That may be okay for backend_callback, but not for apply_callback, and results in a negative tracedepth after the return from the callback. Greetings, Gnomi. | ||||
Tags | No tags attached. | ||||
Attached Files | tracedepth.diff (995 bytes)
Index: trunk.diverses/src/interpret.c =================================================================== --- trunk.diverses/src/interpret.c (Revision 2255) +++ trunk.diverses/src/interpret.c (Arbeitskopie) @@ -17959,6 +17959,7 @@ #ifdef USE_NEW_INLINES inter_context = NULL; #endif /* USE_NEW_INLINES */ + tracedepth++; eval_instruction(code, sp); /* The result is on the stack (inter_sp) */ return; Index: trunk.diverses/src/simulate.c =================================================================== --- trunk.diverses/src/simulate.c (Revision 2255) +++ trunk.diverses/src/simulate.c (Arbeitskopie) @@ -4047,7 +4047,10 @@ } else { - if (!apply(cb->function.named.name, ob, num_arg + nargs)) + if (toplevel) + tracedepth = 0; + + if (!sapply(cb->function.named.name, ob, num_arg + nargs)) transfer_svalue(&apply_return_value, &const0); } | ||||
Date Modified | Username | Field | Change |
---|---|---|---|
2006-01-06 20:35 | Gnomi | New Issue | |
2006-02-17 01:46 | Gnomi | File Added: tracedepth.diff | |
2006-02-17 01:47 | Gnomi | Note Added: 0000476 | |
2006-02-21 00:45 |
|
Status | new => resolved |
2006-02-21 00:45 |
|
Fixed in Version | => 3.3.713 |
2006-02-21 00:45 |
|
Resolution | open => fixed |
2006-02-21 00:45 |
|
Assigned To | => lars |
2006-02-21 00:45 |
|
Note Added: 0000479 | |
2007-10-06 19:55 |
|
Status | resolved => closed |
2010-11-16 09:42 |
|
Source_changeset_attached | => ldmud.git master 07cb1687 |
2010-11-16 09:42 |
|
Source_changeset_attached | => ldmud.git master-3.2 cf13749b |
2018-01-29 18:59 |
|
Source_changeset_attached | => ldmud.git master 07cb1687 |
2018-01-29 18:59 |
|
Source_changeset_attached | => ldmud.git master-3.2 cf13749b |
2018-01-29 21:57 |
|
Source_changeset_attached | => ldmud.git master 07cb1687 |
2018-01-29 21:57 |
|
Source_changeset_attached | => ldmud.git master-3.2 cf13749b |