Skip to content

Commit 81130f0

Browse files
use compareandset. Add a test for peak tracking.
1 parent e76be3c commit 81130f0

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/nmt/NmtMallocMemoryInfo.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,11 @@ void track(UnsignedWord allocationSize) {
6262
private void updatePeak(long newUsed, long newCount) {
6363
long expectedPeakUsage = peakUsage;
6464
while (expectedPeakUsage < newUsed) {
65-
long originalValue = U.compareAndExchangeLong(this, PEAK_USAGE_OFFSET, expectedPeakUsage, newUsed);
66-
if (originalValue == expectedPeakUsage) {
65+
if (U.compareAndSetLong(this, PEAK_USAGE_OFFSET, expectedPeakUsage, newUsed)) {
6766
peakCount = newCount;
68-
break;
67+
return;
6968
}
70-
expectedPeakUsage = originalValue;
69+
expectedPeakUsage = peakUsage;
7170
}
7271
}
7372

substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/nmt/NativeMemoryTrackingTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,24 @@ public void testRealloc() {
8383
assertEquals(0, getUsedMemory());
8484
}
8585

86+
@Test
87+
public void testPeakTracking() {
88+
assertEquals(0, getUsedMemory());
89+
90+
Pointer ptr1 = NativeMemory.malloc(WordFactory.unsigned(ALLOCATION_SIZE), NmtCategory.Code);
91+
long initialPeak = NativeMemoryTracking.singleton().getPeakUsedMemory(NmtCategory.Code);
92+
assertTrue(initialPeak > 0);
93+
94+
Pointer ptr2 = NativeMemory.malloc(WordFactory.unsigned(initialPeak * 2), NmtCategory.Code);
95+
long newPeak = NativeMemoryTracking.singleton().getPeakUsedMemory(NmtCategory.Code);
96+
assertTrue(newPeak >= initialPeak * 2);
97+
98+
NativeMemory.free(ptr1);
99+
NativeMemory.free(ptr2);
100+
assertTrue(NativeMemoryTracking.singleton().getPeakUsedMemory(NmtCategory.Code) == newPeak);
101+
assertEquals(0, getUsedMemory());
102+
}
103+
86104
private static long getUsedMemory() {
87105
return NativeMemoryTracking.singleton().getUsedMemory(NmtCategory.Code);
88106
}

0 commit comments

Comments
 (0)