Index: vdsk/resources/Karajan.stg =================================================================== --- vdsk.orig/resources/Karajan.stg 2008-11-16 01:18:13.000000000 -0600 +++ vdsk/resources/Karajan.stg 2008-11-16 01:25:52.000000000 -0600 @@ -289,11 +289,7 @@ $var$ - - $value$ - >> Index: vdsk/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java =================================================================== --- vdsk.orig/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java 2008-11-16 01:18:13.000000000 -0600 +++ vdsk/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java 2008-11-16 01:25:52.000000000 -0600 @@ -3,11 +3,13 @@ */ package org.griphyn.vdl.karajan.lib; + import org.apache.log4j.Logger; import org.griphyn.vdl.karajan.PairIterator; import org.globus.cog.karajan.arguments.Arg; import org.globus.cog.karajan.stack.VariableStack; import org.globus.cog.karajan.workflow.ExecutionException; +import org.globus.cog.karajan.workflow.futures.FutureNotYetAvailable; import org.griphyn.vdl.mapping.DSHandle; import org.griphyn.vdl.mapping.Path; @@ -25,7 +27,7 @@ try { Path path = parsePath(OA_PATH.getValue(stack), stack); DSHandle leaf = var.getField(path); - Object value = PA_VALUE.getValue(stack); + DSHandle value = (DSHandle)PA_VALUE.getValue(stack); if (logger.isInfoEnabled()) { logger.info("Setting " + leaf + " to " + value); } @@ -38,10 +40,16 @@ // leaf.setValue(internalValue(leaf.getType(), value)); if( (value instanceof DSHandle && ((DSHandle)value).getType().isArray()) || (value instanceof PairIterator)) { logger.warn("Warning: array assignment outside of initialisation does not work correctly."); + } else { + synchronized(value.getRoot()) { + if (!value.isClosed()) { + throw new FutureNotYetAvailable(addFutureListener(stack,value)); + } else { + leaf.setValue(value.getValue()); + closeShallow(stack, leaf); + } + } } - - leaf.setValue(value); - closeShallow(stack, leaf); } return null; }