for ( LeftTuple leftTuple = srcLeftTuples.getUpdateFirst(); leftTuple != null; ) {
LeftTuple next = leftTuple.getStagedNext();
DefaultJobHandle jobHandle = (DefaultJobHandle) leftTuple.getObject();
LeftTupleList leftTuples = tm.getInsertOrUpdateLeftTuples();
synchronized ( leftTuples ) {
// the job removal and memory check is done within a sync block, incase it is executing a trigger at the
// same time we are procesing an update
timerService.removeJob( jobHandle );
if ( leftTuple.getMemory() != null ) {
// a previous timer has requested an eval, so remove, we don't want it processed twice
leftTuples.remove( leftTuple );
}
}
scheduleLeftTuple( timerNode, tm, pmem, sink, wm, timer, timerService, timestamp, calendarNames, calendars, leftTuple, trgLeftTuples, stagedLeftTuples );
leftTuple.clearStaged();