Skip to content

Commit 9abeada

Browse files
MatthiasWerninglukebakken
authored andcommitted
Code review suggestions: Do not pass lock object down to timer registration; dispose old timer on elapse; general suggested refactorings
1 parent 717275b commit 9abeada

File tree

1 file changed

+10
-17
lines changed

1 file changed

+10
-17
lines changed

projects/RabbitMQ.Client/client/api/ICredentialsRefresher.cs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public ICredentialsProvider Register(ICredentialsProvider provider, ICredentials
9393
return provider;
9494
}
9595

96-
registration = new TimerRegistration(_lockObj, callback);
96+
registration = new TimerRegistration(callback);
9797
_registrations.Add(provider, registration);
9898
registration.ScheduleTimer(provider);
9999

@@ -107,10 +107,7 @@ public bool Unregister(ICredentialsProvider provider)
107107
{
108108
lock (_lockObj)
109109
{
110-
if (_registrations.TryGetValue(provider, out var registration))
111-
{
112-
_registrations.Remove(provider);
113-
110+
if (_registrations.Remove(provider, out var registration)) {
114111
TimerBasedCredentialRefresherEventSource.Log.Unregistered(provider.Name);
115112
registration.Dispose();
116113
return true;
@@ -123,23 +120,21 @@ public bool Unregister(ICredentialsProvider provider)
123120
private class TimerRegistration : IDisposable
124121
{
125122

126-
private readonly object _lockObj;
127123
private System.Timers.Timer? _timer;
128124
private bool _disposed;
129125

130126
public ICredentialsRefresher.NotifyCredentialRefreshedAsync Callback { get; set; }
131127

132-
public TimerRegistration(object lockObj, ICredentialsRefresher.NotifyCredentialRefreshedAsync callback)
128+
public TimerRegistration(ICredentialsRefresher.NotifyCredentialRefreshedAsync callback)
133129
{
134-
_lockObj = lockObj;
135130
Callback = callback;
136131
}
137132

138133
public void ScheduleTimer(ICredentialsProvider provider)
139134
{
140135
if (provider.ValidUntil == null)
141136
{
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");
143138
}
144139
if (_disposed)
145140
{
@@ -151,14 +146,10 @@ public void ScheduleTimer(ICredentialsProvider provider)
151146
newTimer.Elapsed += async (o, e) =>
152147
{
153148
TimerBasedCredentialRefresherEventSource.Log.TriggeredTimer(provider.Name);
154-
155-
lock (_lockObj)
149+
if (_disposed)
156150
{
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;
162153
}
163154

164155
try
@@ -177,14 +168,16 @@ public void ScheduleTimer(ICredentialsProvider provider)
177168
newTimer.Enabled = true;
178169
newTimer.AutoReset = false;
179170
TimerBasedCredentialRefresherEventSource.Log.ScheduledTimer(provider.Name, newTimer.Interval);
171+
var oldTimer = _timer;
180172
_timer = newTimer;
173+
oldTimer?.Dispose();
181174
}
182175

183176
public void Dispose()
184177
{
185178
if (_disposed)
186179
{
187-
throw new InvalidOperationException("registration already disposed");
180+
throw new ObjectDisposedException(GetType().FullName);
188181
}
189182

190183
try

0 commit comments

Comments
 (0)