THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- Add exception_ptr member for ThreadedOpr opr_ex and exception_ptr member for ThreadedVar var_ex.
- Put a try catch block in the ExecuteOprBlock around the execution of the operator.
- If there is an exception exeption thrown during the execution of the operator, then we intend to catch the exception and use the exception_ptr member for the ThreadedOpr to point to the exception object. We explicitly make a call to callback in this case.
- In the callback, we will set the exception_ptr member for all the variables that the current operator will mutate.
- In the callback we also set the exception_ptr member for the current operator to the one held by one of its dependencies. This way we can propagate an old exception_ptr down the dependency chain.
- Also set the global_exc_ptr depending on whether there is exception associated with a read var.
- In WaitForVar, check if the threaded_var->var_ex is set. If it is set, rethrow the exception. Since we are waiting for this var, if this var had an exception associated with it means somewhere in the dependency path to get to the var there was an exception thrown.
- In WaitForAll, we can rethrow exception based on whether global_exc_ptr is set or not.
...