From ee27be33999c438b83d255b58a1b55192db77803 Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Wed, 8 Oct 2014 15:22:29 +0200 Subject: [PATCH] misc bugfixes (concurrency, memory protection) --- source/net/yacy/cora/protocol/ConnectionInfo.java | 5 +++-- source/net/yacy/gui/Audio.java | 12 ++++++++---- source/net/yacy/kelondro/table/Table.java | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/source/net/yacy/cora/protocol/ConnectionInfo.java b/source/net/yacy/cora/protocol/ConnectionInfo.java index 3bfbb6d96..cb1a87a4b 100644 --- a/source/net/yacy/cora/protocol/ConnectionInfo.java +++ b/source/net/yacy/cora/protocol/ConnectionInfo.java @@ -26,6 +26,7 @@ package net.yacy.cora.protocol; import java.util.Collections; +import java.util.ConcurrentModificationException; import java.util.HashSet; import java.util.Iterator; import java.util.Set; @@ -294,12 +295,12 @@ public class ConnectionInfo implements Comparable { private static void cleanup(final Iterator iter) { synchronized (iter) { - while (iter.hasNext()) { + while (iter.hasNext()) try { ConnectionInfo con = iter.next(); if(con.getLifetime() > staleAfterMillis) { getAllConnections().remove(con); } - } + } catch (ConcurrentModificationException e) {} } } diff --git a/source/net/yacy/gui/Audio.java b/source/net/yacy/gui/Audio.java index 871591b83..a0d90c902 100644 --- a/source/net/yacy/gui/Audio.java +++ b/source/net/yacy/gui/Audio.java @@ -35,6 +35,8 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.UnsupportedAudioFileException; +import net.yacy.kelondro.util.MemoryControl; + /** * wrapper class for audio tools @@ -130,10 +132,12 @@ public class Audio { Clip clip; if ((clip = getClip()) == null) return; if (clip.isActive()) { - Clip onetimeclip = getFreshClip(); - FloatControl gainControl = (FloatControl) onetimeclip.getControl(FloatControl.Type.MASTER_GAIN); - gainControl.setValue(gain); - onetimeclip.start(); + if (!MemoryControl.shortStatus()) try { + Clip onetimeclip = getFreshClip(); + FloatControl gainControl = (FloatControl) onetimeclip.getControl(FloatControl.Type.MASTER_GAIN); + gainControl.setValue(gain); + onetimeclip.start(); + } catch (OutOfMemoryError e) {} } else { FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); gainControl.setValue(gain); diff --git a/source/net/yacy/kelondro/table/Table.java b/source/net/yacy/kelondro/table/Table.java index 3c81c36cd..212bd99b9 100644 --- a/source/net/yacy/kelondro/table/Table.java +++ b/source/net/yacy/kelondro/table/Table.java @@ -825,7 +825,7 @@ public class Table implements Index, Iterable { @Override public synchronized Entry removeOne() throws IOException { - assert this.file.size() == this.index.size() : "file.size() = " + this.file.size() + ", index.size() = " + this.index.size(); + //assert this.file.size() == this.index.size() : "file.size() = " + this.file.size() + ", index.size() = " + this.index.size(); assert this.table == null || this.table.size() == this.index.size() : "table.size() = " + this.table.size() + ", index.size() = " + this.index.size(); final byte[] le = new byte[this.rowdef.objectsize]; final long fsb = this.file.size(); @@ -845,7 +845,7 @@ public class Table implements Index, Iterable { this.table.removeOne(); assert this.table.size() < tsb : "table.size() = " + this.table.size() + ", tsb = " + tsb; } - assert this.file.size() == this.index.size() : "file.size() = " + this.file.size() + ", index.size() = " + this.index.size(); + //assert this.file.size() == this.index.size() : "file.size() = " + this.file.size() + ", index.size() = " + this.index.size(); assert this.table == null || this.table.size() == this.index.size() : "table.size() = " + this.table.size() + ", index.size() = " + this.index.size(); return lr; }