[Jiemamy-notify] commit [2109] [SER-5] Swapper においてクリーニング直後のスワップで NPE

Zurück zum Archiv-Index

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");
+		}
 	}
 	
 }


Jiemamy-notify メーリングリストの案内
Zurück zum Archiv-Index