Skip to content

Commit 1b7ded2

Browse files
committed
Updating FileWatcherEverntSource to avoid publishing events after disposal. Throwing from ScriptEventManager if Publish or Subscribe are called after disposal.
1 parent a223509 commit 1b7ded2

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/WebJobs.Script/Eventing/File/FileWatcherEventSource.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@ public FileWatcherEventSource(IScriptEventManager eventManager,
3131

3232
private void FileChanged(object sender, FileSystemEventArgs e)
3333
{
34-
var fileEvent = new FileEvent(_source, e);
35-
_eventManager.Publish(fileEvent);
34+
if (!_disposed)
35+
{
36+
var fileEvent = new FileEvent(_source, e);
37+
_eventManager.Publish(fileEvent);
38+
}
3639
}
3740

3841
private void Dispose(bool disposing)

src/WebJobs.Script/Eventing/ScriptEventManager.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,27 @@ public sealed class ScriptEventManager : IScriptEventManager, IDisposable
1111
private readonly Subject<ScriptEvent> _subject = new Subject<ScriptEvent>();
1212
private bool _disposed = false;
1313

14-
public void Publish(ScriptEvent scriptEvent) => _subject.OnNext(scriptEvent);
14+
public void Publish(ScriptEvent scriptEvent)
15+
{
16+
ThrowIfDisposed();
17+
18+
_subject.OnNext(scriptEvent);
19+
}
1520

16-
public IDisposable Subscribe(IObserver<ScriptEvent> observer) => _subject.Subscribe(observer);
21+
public IDisposable Subscribe(IObserver<ScriptEvent> observer)
22+
{
23+
ThrowIfDisposed();
24+
25+
return _subject.Subscribe(observer);
26+
}
27+
28+
private void ThrowIfDisposed()
29+
{
30+
if (_disposed)
31+
{
32+
throw new ObjectDisposedException(nameof(ScriptEventManager));
33+
}
34+
}
1735

1836
private void Dispose(bool disposing)
1937
{

0 commit comments

Comments
 (0)