Skip to content

Commit

Permalink
Fix FunctionExecutor null ref
Browse files Browse the repository at this point in the history
  • Loading branch information
mathewc committed Jul 2, 2018
1 parent f4157c7 commit dd53af8
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions src/Microsoft.Azure.WebJobs.Host/Executors/FunctionExecutor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ public async Task<IDelayedException> TryExecuteAsync(IFunctionInstance functionI
};

exceptionInfo = ExceptionDispatchInfo.Capture(exception);

exceptionInfo = await InvokeExceptionFiltersAsync(parameterHelper.JobInstance, exceptionInfo, functionInstance, parameterHelper.FilterContextProperties, cancellationToken);
}

Expand All @@ -133,8 +132,11 @@ public async Task<IDelayedException> TryExecuteAsync(IFunctionInstance functionI
logCompletedCancellationToken = cancellationToken;
}

await NotifyCompleteAsync(instanceLogEntry, functionCompletedMessage.Arguments, exceptionInfo);
_resultsLogger?.LogFunctionResult(instanceLogEntry);
if (instanceLogEntry != null)
{
await NotifyCompleteAsync(instanceLogEntry, functionCompletedMessage.Arguments, exceptionInfo);
_resultsLogger?.LogFunctionResult(instanceLogEntry);
}

if (functionCompletedMessage != null &&
((functionTraceLevel >= TraceLevel.Info) || (functionCompletedMessage.Failure != null && functionTraceLevel >= TraceLevel.Error)))
Expand Down Expand Up @@ -752,34 +754,39 @@ private Task NotifyPostBindAsync(FunctionInstanceLogEntry fastItem, IDictionary<
}

// Called after function completes.
private Task NotifyCompleteAsync(FunctionInstanceLogEntry intanceLogEntry, IDictionary<string, string> arguments, ExceptionDispatchInfo exceptionInfo)
private Task NotifyCompleteAsync(FunctionInstanceLogEntry instance, IDictionary<string, string> arguments, ExceptionDispatchInfo exceptionInfo)
{
intanceLogEntry.LiveTimer.Stop();
if (instance == null)
{
throw new ArgumentNullException(nameof(instance));
}

instance.LiveTimer.Stop();

// log result
intanceLogEntry.EndTime = DateTime.UtcNow;
intanceLogEntry.Duration = intanceLogEntry.LiveTimer.Elapsed;
intanceLogEntry.Arguments = arguments;
instance.EndTime = DateTime.UtcNow;
instance.Duration = instance.LiveTimer.Elapsed;
instance.Arguments = arguments;

Debug.Assert(intanceLogEntry.IsCompleted);
Debug.Assert(instance.IsCompleted);

// Log completed
if (exceptionInfo != null)
{
var ex = exceptionInfo.SourceException;
intanceLogEntry.Exception = ex;
instance.Exception = ex;
if (ex.InnerException != null)
{
ex = ex.InnerException;
}
intanceLogEntry.ErrorDetails = ex.Message;
instance.ErrorDetails = ex.Message;
}

if (_functionEventCollector == null)
{
return Task.CompletedTask;
}
return _functionEventCollector.AddAsync(intanceLogEntry);
return _functionEventCollector.AddAsync(instance);
}

// Handle various phases of parameter building and logging.
Expand Down

0 comments on commit dd53af8

Please sign in to comment.