Bug 1324 - Buffer released correctly (even if translated dataObject is null) 87/8787/4
authorMichal Polkorab <michal.polkorab@pantheon.sk>
Tue, 8 Jul 2014 09:28:48 +0000 (11:28 +0200)
committerMichal Polkorab <michal.polkorab@pantheon.sk>
Tue, 8 Jul 2014 12:01:01 +0000 (14:01 +0200)
 - updated OFDecoderTest - buffer is now released even on deserialization exception

Change-Id: I1a3a6f17309f795b7db08bf3ed68ea49ab888cf0
Signed-off-by: Michal Polkorab <michal.polkorab@pantheon.sk>
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OFDecoder.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/core/OFDecoderTest.java

index 8edebe925a13b7f3971ecf2791859724108297ae..450eb4bb1757909d407ee06d424289cbea497e2e 100644 (file)
@@ -47,17 +47,19 @@ public class OFDecoder extends MessageToMessageDecoder<VersionMessageWrapper> {
         try {
             dataObject = deserializationFactory.deserialize(msg.getMessageBuffer(),
                     msg.getVersion());
+            if (dataObject == null) {
+                LOGGER.warn("Translated POJO is null");
+            } else {
+                out.add(dataObject);
+            }
         } catch(Exception e) {
             LOGGER.error("Message deserialization failed");
             LOGGER.error(e.getMessage(), e);
-            return;
+            // TODO: delegate exception to allow easier deserialization
+            // debugging / deserialization problem awareness
+        } finally {
+            msg.getMessageBuffer().release();
         }
-        if (dataObject == null) {
-            LOGGER.warn("Translated POJO is null");
-            return;
-        }
-        msg.getMessageBuffer().release();
-        out.add(dataObject);
     }
 
     /**
index 27a1bff46ec0b2e1be6f576751a0ce578273b00c..4c2789f16ba60969a03a867e85ee5387bd1dd637 100644 (file)
@@ -90,7 +90,7 @@ public class OFDecoderTest {
 
         // Verify that the message buf was released...
         assertEquals( 0, outList.size() ) ;
-        assertEquals( 1, writeObj.refCnt() ) ;
+        assertEquals( 0, writeObj.refCnt() ) ;
     }
 
     /**
@@ -109,6 +109,6 @@ public class OFDecoderTest {
 
         // Verify that the message buf was released...
         assertEquals( 0, outList.size() ) ;
-        assertEquals( 1, writeObj.refCnt() ) ;
+        assertEquals( 0, writeObj.refCnt() ) ;
     }
 }