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 |