svnno****@sourc*****
svnno****@sourc*****
2008年 11月 9日 (日) 01:31:28 JST
Revision: 2109 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=jiemamy&view=rev&rev=2109 Author: ewigkeit1204 Date: 2008-11-09 01:31:28 +0900 (Sun, 09 Nov 2008) Log Message: ----------- [SER-5] Swapper においてクリーニング直後のスワップで NPE Modified Paths: -------------- artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/swap/Swapper.java artemis/trunk/org.jiemamy.serializer/src/test/java/org/jiemamy/serializer/swap/SwapperTest.java -------------- next part -------------- Modified: artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/swap/Swapper.java =================================================================== --- artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/swap/Swapper.java 2008-11-08 16:28:43 UTC (rev 2108) +++ artemis/trunk/org.jiemamy.serializer/src/main/java/org/jiemamy/serializer/swap/Swapper.java 2008-11-08 16:31:28 UTC (rev 2109) @@ -45,7 +45,7 @@ * * @author Keisuke.K */ -class Swapper { +final class Swapper { /** スワップファイルの接頭辞 */ static final String SWAP_FILE_PREFIX = "jiemamy"; @@ -229,6 +229,11 @@ for (Reference<SwapObject<?>> ref : swapReferenceSet) { SwapObject<? extends Serializable> tmp = ref.get(); + if (tmp == null) { + // [SER-5] clean()後もnullオブジェクトが残る可能性がある。remove()はclean()に一元化するため、無視する。 + continue; + } + if (tmp.position - pos >= baos.size()) { // 位置決定 break; Modified: artemis/trunk/org.jiemamy.serializer/src/test/java/org/jiemamy/serializer/swap/SwapperTest.java =================================================================== --- artemis/trunk/org.jiemamy.serializer/src/test/java/org/jiemamy/serializer/swap/SwapperTest.java 2008-11-08 16:28:43 UTC (rev 2108) +++ artemis/trunk/org.jiemamy.serializer/src/test/java/org/jiemamy/serializer/swap/SwapperTest.java 2008-11-08 16:31:28 UTC (rev 2109) @@ -20,6 +20,7 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; +import static junit.framework.Assert.fail; import java.util.HashMap; @@ -77,7 +78,8 @@ } /** - * 参照が切れ、GC後に不要となったスワップ情報が切り捨てられ、スワップファイルの長さが短くなるかどうかをチェックする。 + * 参照が切れ、GC後に不要となったスワップ情報が切り捨てられ、スワップファイルの長さが短くなるかどうかをチェックする。<br> + * [SER-5] クリーニング直後のスワップで NPE * * @throws Exception */ @@ -108,6 +110,13 @@ // チェック assertEquals(str1, getStr1); assertTrue(currentSize > newSize); + + // [SER-5] 新しくオブジェクトをスワップさせ、NPE が発生しないことを確認。 + try { + SwapObject<String> swapObj3 = new SwapObject<String>("John Doe"); + } catch (NullPointerException e) { + fail("[SER-5] throws NPE"); + } } }