|Anonymous | Login||2017-11-19 14:46 EST|
|Main | My View | View Issues | Change Log | Roadmap | My Account|
|View Issue Details|
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0000340||graphviz||Dotty/Lneato/Lefty||public||2004-02-20 21:17||2011-04-28 04:02|
|Summary||0000340: "Lefty PANIC: bad key" on Win98|
My application (about 3K lines of lefty code running on top of Dotty) encounters a popup with a "Lefty PANIC" title and the "bad key" message from time to time, followed by a crash of all Dotty windows. MS Visual C++ then reports a runtime error with abnormal program termination in lefty.exe, but I don't have further info (I just have a binary distribution of graphviz). The effect is repeatable with the exact same series of steps, but minor variations run fine. The latest instance for me occurs when I run a particular Lefty script against one particular graph (a small graph, as is the new graph the script is generating) in batch mode. However, either turning on my verbose flag in the function being called (which runs the exact same code with a few calls to echo enabled to provide status), or loading the script against the same graph from the lefty window instead of a DOS command line causes the script to run successfully.
Unfortunately, I really need this script to run uninterrupted from the command line to get accurate timing data.
Because of the elusive nature of this bug, it's almost impossible to winnow it down to a small example, and I'm not prepared to send my whole application. So duplication may be a problem - I'm hoping you've encountered something like it in another lefty application, or can at least suggest likely causes by looking at the source (I have a binary distribution only). I've sent a screen shot along (16 color bitmap) to show the popup window along with the window from which I'm invoking the script.
[ek] the 'bad key' panic happens when you try to insert/find/delete
something in a table, and the key you provide is a non-scalar,
e.g. another table. the interpreter is supposed to check for this
and emit a runtime error, so this shouldn't happen from a lefty
script. it could happen from a builtin function, like the graph
read/write functions. it's strange that it's not consistent though.
a couple things to do.
set the environment variable LEFTYOPTIONS to say '-el 2'.
that prints more verbose error messages from the interpreter.
won't help if it's a builtin function problem. and you'll
break your finger clicking 'ok' for each message (it uses
The problem is that Mdogc (in mem.c)
is being called while the interpreter is in the middle of the
eforinst loop, and the table being iterated over is one of the
blocks of memory that gets Mfree called on it in Mdogc.
In particular, the value of otarray during the
loop from i=0 to prevoti (= 79739)) is equal to the
address of the table. So the memory gets scribbled on by the
call to Mfree, and then it gets reused shortly thereafter,
while the eforinst loop is still going on --> crash.
I suspect that this bug is behind most, if not all, of the
various crashes I have observed. I don't know if there is a quick
fix - clearly, any data that is actively being referenced
by the interpreter needs to be protected from being relocated/freed
in Mdogc. I haven't probed deeply enough into the data structures
to see what precautions you are already taking. One possibility
is to increment/decrement object reference counts as the
interpreter uses the objects.
|Tags||No tags attached.|
|STATUS-COMMENT||Fixed (4 March 2004)|
|VERSION||1.9 (or 1.10)|
|2011-04-28 04:02||user1||New Issue|
|2011-04-28 04:02||user1||Assigned To||=> user1|
|MantisBT 1.2.5[^] Copyright © 2000 - 2011 MantisBT Group|