You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/03/10 07:23:37 UTC
[16/43] ignite git commit: IGNITE-4712 Memory leaks in PageMemory
IGNITE-4712 Memory leaks in PageMemory
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1a2bbef1
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1a2bbef1
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1a2bbef1
Branch: refs/heads/ignite-4712
Commit: 1a2bbef110e1d6f924576c91c4e73a58174cb581
Parents: 852183e
Author: Igor Seliverstov <gv...@gmail.com>
Authored: Wed Feb 22 11:28:14 2017 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Wed Feb 22 11:28:14 2017 +0300
----------------------------------------------------------------------
.../cache/database/freelist/PagesList.java | 38 ++++++++------------
1 file changed, 14 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/1a2bbef1/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
index 5fdd191..b2c6e9c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java
@@ -200,23 +200,17 @@ public abstract class PagesList extends DataStructure {
for (int i = 0; i < upd.length; i++) {
long tailId = upd[i];
- // TODO: just relase readlock.
- List<Page> locked = new ArrayList<>(2);
- List<Long> lockedAddrs = new ArrayList<>(2);
+ long pageId = tailId;
+ int count = 0;
- try {
- long pageId = tailId;
- int count = 0;
-
- while (pageId != 0L) {
- try (Page page = page(pageId)) {
- long pageAddr = readLock(page);
+ while (pageId != 0L) {
- assert pageAddr != 0L;
+ try (Page page = page(pageId)) {
+ long pageAddr = readLock(page);
- locked.add(page);
- lockedAddrs.add(pageAddr);
+ assert pageAddr != 0L;
+ try {
PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr);
count += io.getCount(pageAddr);
@@ -226,19 +220,15 @@ public abstract class PagesList extends DataStructure {
if (isReuseBucket(bucket) && pageId != 0L)
count++;
}
- }
-
- Stripe stripe = new Stripe(tailId, count == 0);
-
- tails[i] = stripe;
-
- bucketSize += count;
- }
- finally {
- for (int j = 0; j < locked.size(); j++) {
- readUnlock(locked.get(j), lockedAddrs.get(j));
+ finally {
+ readUnlock(page, pageAddr);
+ }
}
}
+
+ Stripe stripe = new Stripe(tailId, count == 0);
+ tails[i] = stripe;
+ bucketSize += count;
}
boolean ok = casBucket(bucket, null, tails);