[kepler-dev] IOPortEvent bug
Colin Enticott
Colin.Enticott at csse.monash.edu.au
Mon May 24 00:42:13 PDT 2010
Hi Christopher,
I'm having trouble again when I use the clone(Workspace) method again
on an active workflow. This time I am getting an exception when
evaluating an expression. The actor has an expression:
$a $b $c $d $e $f $g $h $i $j
The Parameter "a" refers to parameter "A" and likewise for the rest
(yes, this is a test workflow :-) ).
After the following code to clone the actor into a new workspace, I
get the following exception:
_actor = (Actor)((Entity)_parentActor).clone(_workspace);
_actor.setName(name);
((ComponentEntity)_actor).setContainer(tca);
ptolemy.kernel.util.IllegalActionException: Error evaluating
expression: $a $b $c $d $e $f $g $h $i $j
in .ParameterDepend.String Constant_C2_TCA.String Constant_C2.value
Because:
The ID h is undefined.
with tag colour {sequenceID=2, batchSize=1024, parameters={A = 1, B
= 1, C = 1, D = 1, E = 1, F = 1, G = 1, H = 1, I = 2, J = 1},
hashcode=-1226196380}
in .ParameterDepend.String Constant_C2_TCA.String Constant_C2
at ptolemy.data.expr.Variable.validate(Variable.java:1449)
at ptolemy.kernel.util.NamedObj._validateSettables(NamedObj.java:2658)
at ptolemy.kernel.Entity._validateSettables(Entity.java:651)
at ptolemy.kernel.util.NamedObj.validateSettables(NamedObj.java:1972)
at org.monash.nimrod.NimrodDirector.NimrodProcessThread._updateParameters(NimrodProcessThread.java:692)
at org.monash.nimrod.NimrodDirector.NimrodProcessThread.run(NimrodProcessThread.java:389)
But if I change the code into this slower, more java memory hungry
version, it works:
String s = ((Entity)_parentActor).exportMoML(name);
MoMLChangeRequest l = new MoMLChangeRequest(this, tca, s);
l.execute();
_actor = (Actor)tca.getEntity(name);
Looking at the code for th Variable class, it is hard for me to tell
what isn't being updated. The best guess I have is I can't see
_parseTreeEvaluator being reset in the clone(Workspace) method. The
_parseTreeEvaluator holds onto state including a "ParserScope". Could
this be the problem?
Or is it something else I am doing?
Thanks,
Colin
On 4 January 2010 05:04, Christopher Brooks <cxh at eecs.berkeley.edu> wrote:
> Hi Colin,
> Thanks, I wrote a test that illustrates this problem and then
> fixed it.
>
> The test is
>
> test NamedObj-8.1.0 {clone should not have _debugListener set} {
> set n [java::new ptolemy.kernel.util.Workspace "N"]
> set a [java::new ptolemy.kernel.util.NamedObj $n "A" ]
> set listener [java::new ptolemy.kernel.util.RecorderListener]
> $a addDebugListener $listener
> set b [java::cast ptolemy.kernel.util.NamedObj [$a clone]]
> set listenerB [java::new ptolemy.kernel.util.RecorderListener]
> $b addDebugListener $listenerB
> $b setName B
> $b clone
> list [$listener getMessages] \
> [$listenerB getMessages]
> } {{Cloned .A into workspace: N
> } {Changed name from .A to .B
> Cloned .B into workspace: N
> }}
>
>
> Before the fix, the result was:
>
> {Cloned .A into workspace: N
> Changed name from .A to .B
> Cloned .B into workspace: N
> } {Changed name from .A to .B
> Cloned .B into workspace: N
> }
>
> which indicates that the listener to A is getting messages intended for B.
>
> _Christopher
>
> On 12/28/09 9:15 PM, Colin Enticott wrote:
>>
>> Hi Christopher,
>>
>> Along the same lines as this old bug, it seems _debugListeners is not
>> being nulled on the new object after clone(Workspace) is called.
>>
>> It's funny I noticed problems with debugging after two years working
>> with Kepler. It's obvious I don't debug my code enough ;-)
>>
>> Oh, I'm still working with Kepler-1.0.0. If this has been fixed since,
>> I apologise.
>>
>> Kind regards,
>> Colin
>>
>> 2008/2/23 Colin Enticott<Colin.Enticott at infotech.monash.edu.au>:
>>>
>>> Thanks Dan and Christoper. Works a treat.
>>>
>>> Colin
>>>
>>> -----Original Message-----
>>> From: cxh at eecs.berkeley.edu [mailto:cxh at eecs.berkeley.edu]
>>> Sent: Saturday, 23 February 2008 6:14 AM
>>> To: Daniel Crawl
>>> Cc: Colin Enticott; Kepler-Dev
>>> Subject: Re: [kepler-dev] IOPortEvent bug
>>>
>>> Done!
>>>
>>>
>>> cxh at carson 192% cvs diff -D yesterday IOPort.java
>>> Index: IOPort.java
>>> ===================================================================
>>> RCS file: /home/cvs/ptII/ptolemy/actor/IOPort.java,v
>>> retrieving revision 1.260
>>> retrieving revision 1.261
>>> diff -r1.260 -r1.261
>>> 129c129
>>> < @version $Id: IOPort.java,v 1.260 2008/02/19 18:25:47 cxh Exp $
>>> ---
>>>>
>>>> @version $Id: IOPort.java,v 1.261 2008/02/22 19:11:58 cxh Exp $
>>>
>>> 420a421,424
>>>>
>>>> newObject._hasPortEventListeners = false;
>>>> newObject._portEventListeners = null;
>>>>
>>> cxh at carson 193%
>>>
>>> On my todo list is to write some tests for the IOPortListener
>>> code.
>>>
>>> _Christopher
>>>
>>> --------
>>>
>>>
>>> Hi Colin,
>>>
>>> The cloned IOPort's listener list should be set to null. Since
>>> Kepler CVS no longer has a separate copy of IOPort.java, could
>>> someone make this change in ptII CVS?
>>>
>>> Thanks,
>>>
>>> --dan
>>>
>>> Colin Enticott wrote:
>>> > Hi all,
>>> >
>>> > I was having trouble with my code and I have narrowing it down to
>>> > IOPortEvents feature. There appears to be a bug in the IOPort
>>> class
>>> with
>>> > IOPortEvent feature and cloning. It looks like if there has been
>>> an
>>> > IOPortEventListener added, when it is cloned, all the clones will
>>> have
>>> a
>>> > reference to the same listener list. I guess the list itself
>>> should
>>> be
>>> > cloned or the clone's list reference should be set back to null.
>>> >
>>> > It is possible if someone could have a look at this?
>>> >
>>> > Thanks,
>>> > Colin
>>> >
>>> > _______________________________________________
>>> > Kepler-dev mailing list
>>> > Kepler-dev at ecoinformatics.org
>>> >
>>> http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev
>>> >
>>>
>>> _______________________________________________
>>> Kepler-dev mailing list
>>> Kepler-dev at ecoinformatics.org
>>>
>>> http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev
>>> --------
>>>
>>> _______________________________________________
>>> Kepler-dev mailing list
>>> Kepler-dev at ecoinformatics.org
>>> http://mercury.nceas.ucsb.edu/ecoinformatics/mailman/listinfo/kepler-dev
>>>
>>
>>
>>
>
> --
> Christopher Brooks, PMP University of California
> CHESS Executive Director US Mail: 337 Cory Hall
> Programmer/Analyst CHESS/Ptolemy/Trust Berkeley, CA 94720-1774
> ph: 510.643.9841 fax:510.642.2718 (Office: 545Q Cory)
> home: (F-Tu) 707.665.0131 cell: 707.332.0670
>
--
Colin
More information about the Kepler-dev
mailing list