@@ -93,7 +93,7 @@ public ICredentialsProvider Register(ICredentialsProvider provider, ICredentials
93
93
return provider ;
94
94
}
95
95
96
- registration = new TimerRegistration ( _lockObj , callback ) ;
96
+ registration = new TimerRegistration ( callback ) ;
97
97
_registrations . Add ( provider , registration ) ;
98
98
registration . ScheduleTimer ( provider ) ;
99
99
@@ -107,10 +107,7 @@ public bool Unregister(ICredentialsProvider provider)
107
107
{
108
108
lock ( _lockObj )
109
109
{
110
- if ( _registrations . TryGetValue ( provider , out var registration ) )
111
- {
112
- _registrations . Remove ( provider ) ;
113
-
110
+ if ( _registrations . Remove ( provider , out var registration ) ) {
114
111
TimerBasedCredentialRefresherEventSource . Log . Unregistered ( provider . Name ) ;
115
112
registration . Dispose ( ) ;
116
113
return true ;
@@ -123,23 +120,21 @@ public bool Unregister(ICredentialsProvider provider)
123
120
private class TimerRegistration : IDisposable
124
121
{
125
122
126
- private readonly object _lockObj ;
127
123
private System . Timers . Timer ? _timer ;
128
124
private bool _disposed ;
129
125
130
126
public ICredentialsRefresher . NotifyCredentialRefreshedAsync Callback { get ; set ; }
131
127
132
- public TimerRegistration ( object lockObj , ICredentialsRefresher . NotifyCredentialRefreshedAsync callback )
128
+ public TimerRegistration ( ICredentialsRefresher . NotifyCredentialRefreshedAsync callback )
133
129
{
134
- _lockObj = lockObj ;
135
130
Callback = callback ;
136
131
}
137
132
138
133
public void ScheduleTimer ( ICredentialsProvider provider )
139
134
{
140
135
if ( provider . ValidUntil == null )
141
136
{
142
- throw new ArgumentNullException ( nameof ( provider . ValidUntil ) + " of " + nameof ( provider ) + " was null" ) ;
137
+ throw new ArgumentNullException ( nameof ( provider . ValidUntil ) + " of " + provider . GetType ( ) . Name + " was null" ) ;
143
138
}
144
139
if ( _disposed )
145
140
{
@@ -151,14 +146,10 @@ public void ScheduleTimer(ICredentialsProvider provider)
151
146
newTimer . Elapsed += async ( o , e ) =>
152
147
{
153
148
TimerBasedCredentialRefresherEventSource . Log . TriggeredTimer ( provider . Name ) ;
154
-
155
- lock ( _lockObj )
149
+ if ( _disposed )
156
150
{
157
- if ( _disposed )
158
- {
159
- // We were waiting and the registration has been disposed in meanwhile
160
- return ;
161
- }
151
+ // We were waiting and the registration has been disposed in meanwhile
152
+ return ;
162
153
}
163
154
164
155
try
@@ -177,14 +168,16 @@ public void ScheduleTimer(ICredentialsProvider provider)
177
168
newTimer . Enabled = true ;
178
169
newTimer . AutoReset = false ;
179
170
TimerBasedCredentialRefresherEventSource . Log . ScheduledTimer ( provider . Name , newTimer . Interval ) ;
171
+ var oldTimer = _timer ;
180
172
_timer = newTimer ;
173
+ oldTimer ? . Dispose ( ) ;
181
174
}
182
175
183
176
public void Dispose ( )
184
177
{
185
178
if ( _disposed )
186
179
{
187
- throw new InvalidOperationException ( "registration already disposed" ) ;
180
+ throw new ObjectDisposedException ( GetType ( ) . FullName ) ;
188
181
}
189
182
190
183
try
0 commit comments