Skip to content

Commit 34e1748

Browse files
committed
Fixing a memoryleak in the temperature mode.
1 parent 6df54ce commit 34e1748

2 files changed

Lines changed: 23 additions & 13 deletions

File tree

MSI LED Tool/Program.cs

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.Drawing;
44
using System.IO;
55
using System.Linq;
6-
using System.Runtime.CompilerServices;
76
using System.Runtime.InteropServices;
87
using System.Threading;
98
using System.Windows.Forms;
@@ -51,8 +50,13 @@ class Program
5150
private static Manufacturer manufacturer;
5251
private static int[] temperatureLimits;
5352

53+
private static Mutex mutex;
54+
private static NdaGraphicsInfo ndaGraphicsInfo;
55+
private static AdlGraphicsInfo adlGraphicsInfo;
56+
5457
static void Main(string[] args)
5558
{
59+
mutex = new Mutex();
5660

5761
string settingsFile = $"{AppDomain.CurrentDomain.BaseDirectory}\\{SettingsFileName}";
5862

@@ -255,24 +259,26 @@ private static void UpdateLedsFront()
255259
switch (manufacturer)
256260
{
257261
case Manufacturer.Nvidia:
258-
NdaGraphicsInfo ndaGraphicsInfo;
262+
mutex.WaitOne();
259263
if (NDA_GetGraphicsInfo(0, out ndaGraphicsInfo))
260264
{
261265
int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0],
262-
temperatureLimits[1], ndaGraphicsInfo.GPU_Temperature_Current);
266+
temperatureLimits[1], 80);
263267
ledColor = GetColorForDeltaTemperature(temperatureDelta);
264268
UpdateLeds(21, 4, 4);
265269
}
270+
mutex.ReleaseMutex();
266271
break;
267272
case Manufacturer.AMD:
268-
AdlGraphicsInfo adlGraphicsInfo;
273+
mutex.WaitOne();
269274
if (ADL_GetGraphicsInfo(0, out adlGraphicsInfo))
270275
{
271276
int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0],
272277
temperatureLimits[1], adlGraphicsInfo.GPU_Temperature_Current);
273278
ledColor = GetColorForDeltaTemperature(temperatureDelta);
274279
UpdateLeds(21, 4, 4);
275280
}
281+
mutex.ReleaseMutex();
276282
break;
277283
}
278284
break;
@@ -306,24 +312,26 @@ private static void UpdateLedsSide()
306312
switch (manufacturer)
307313
{
308314
case Manufacturer.Nvidia:
309-
NdaGraphicsInfo ndaGraphicsInfo;
315+
mutex.WaitOne();
310316
if (NDA_GetGraphicsInfo(0, out ndaGraphicsInfo))
311317
{
312318
int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0],
313-
temperatureLimits[1], ndaGraphicsInfo.GPU_Temperature_Current);
319+
temperatureLimits[1], 80);
314320
ledColor = GetColorForDeltaTemperature(temperatureDelta);
315321
UpdateLeds(21, 1, 4);
316322
}
323+
mutex.ReleaseMutex();
317324
break;
318325
case Manufacturer.AMD:
319-
AdlGraphicsInfo adlGraphicsInfo;
326+
mutex.WaitOne();
320327
if (ADL_GetGraphicsInfo(0, out adlGraphicsInfo))
321328
{
322329
int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0],
323330
temperatureLimits[1], adlGraphicsInfo.GPU_Temperature_Current);
324331
ledColor = GetColorForDeltaTemperature(temperatureDelta);
325332
UpdateLeds(21, 1, 4);
326333
}
334+
mutex.ReleaseMutex();
327335
break;
328336
}
329337
break;
@@ -356,24 +364,26 @@ private static void UpdateLedsBack()
356364
switch (manufacturer)
357365
{
358366
case Manufacturer.Nvidia:
359-
NdaGraphicsInfo ndaGraphicsInfo;
367+
mutex.WaitOne();
360368
if (NDA_GetGraphicsInfo(0, out ndaGraphicsInfo))
361369
{
362370
int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0],
363-
temperatureLimits[1], ndaGraphicsInfo.GPU_Temperature_Current);
371+
temperatureLimits[1], 80);
364372
ledColor = GetColorForDeltaTemperature(temperatureDelta);
365373
UpdateLeds(21, 2, 4);
366374
}
375+
mutex.ReleaseMutex();
367376
break;
368377
case Manufacturer.AMD:
369-
AdlGraphicsInfo adlGraphicsInfo;
378+
mutex.WaitOne();
370379
if (ADL_GetGraphicsInfo(0, out adlGraphicsInfo))
371380
{
372381
int temperatureDelta = CalculateTemperatureDeltaHunderdBased(temperatureLimits[0],
373382
temperatureLimits[1], adlGraphicsInfo.GPU_Temperature_Current);
374383
ledColor = GetColorForDeltaTemperature(temperatureDelta);
375384
UpdateLeds(21, 2, 4);
376385
}
386+
mutex.ReleaseMutex();
377387
break;
378388
}
379389
break;
@@ -421,7 +431,7 @@ private static int CalculateTemperatureDeltaHunderdBased(int upperLimit, int low
421431
return 50;
422432
}
423433

424-
return (current/difference*100);
434+
return current/difference*100;
425435
}
426436
catch
427437
{

MSI LED Tool/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@
3131
// You can specify all the values or you can default the Build and Revision Numbers
3232
// by using the '*' as shown below:
3333
// [assembly: AssemblyVersion("1.0.*")]
34-
[assembly: AssemblyVersion("1.3.0.0")]
35-
[assembly: AssemblyFileVersion("1.3.0.0")]
34+
[assembly: AssemblyVersion("1.3.1.0")]
35+
[assembly: AssemblyFileVersion("1.3.1.0")]

0 commit comments

Comments
 (0)