ocaml and haskell thrift clients now calling readMessageEnd

Summary: I neglected to make the call to readMessageEnd if the client read an app exception in the haskell and ocaml code. Fixed now. The test cases for both now also compile with the new ThriftTest.thrift (though haskell's is still not doing anything but echoing  the args)

Reviewed By: dreiss

Test Plan: Ran test code. This bug would actually never show up because there's only tbinaryprotocol implemented for these languages and that does nothing on a readMessageEnd.

Revert: OK

DiffCamp Revision: 11377


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665651 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_hs_generator.cc b/compiler/cpp/src/generate/t_hs_generator.cc
index e5fcb60..fec7d3f 100644
--- a/compiler/cpp/src/generate/t_hs_generator.cc
+++ b/compiler/cpp/src/generate/t_hs_generator.cc
@@ -868,7 +868,8 @@
         indent() << "(fname, mtype, rseqid) <- readMessageBegin ip" << endl;
       f_client_ <<
         indent() << "if mtype == M_EXCEPTION then do" << endl <<
-        indent() << "  x <- readAppExn ip" << endl;
+        indent() << "  x <- readAppExn ip" << endl <<
+        indent() << "  readMessageEnd ip" << endl;
       f_client_ <<
         indent() << "  throwDyn x" << endl;
       f_client_ <<
diff --git a/compiler/cpp/src/generate/t_ocaml_generator.cc b/compiler/cpp/src/generate/t_ocaml_generator.cc
index 745d8f7..7178fc4 100644
--- a/compiler/cpp/src/generate/t_ocaml_generator.cc
+++ b/compiler/cpp/src/generate/t_ocaml_generator.cc
@@ -916,7 +916,8 @@
         indent() << "  let x = Application_Exn.read iprot in" << endl;
       indent_up();
       f_service_ <<
-        indent() << "  raise (Application_Exn.E x)" << endl;
+        indent() << "  (iprot#readMessageEnd;" <<
+        indent() << "   raise (Application_Exn.E x))" << endl;
       indent_down();
       f_service_ <<
         indent() << "else ());" << endl;
diff --git a/test/hs/Server.hs b/test/hs/Server.hs
index ee4fd20..511d01e 100644
--- a/test/hs/Server.hs
+++ b/test/hs/Server.hs
@@ -28,6 +28,7 @@
     testMulti a a1 a2 a3 a4 a5 a6 = return (Xtruct Nothing Nothing Nothing Nothing)
     testException a c = throwDyn (Xception (Just 1) (Just "bya"))
     testMultiException a c1 c2 = return (Xtruct Nothing Nothing Nothing Nothing)
+    testAsync a (Just i) = do print i
 
 
 main = do (run_basic_server TestHandler process 9090) `catchDyn` (\(TransportExn s t) -> print s)
diff --git a/test/ocaml/server/TestServer.ml b/test/ocaml/server/TestServer.ml
index 3768f5d..6715738 100644
--- a/test/ocaml/server/TestServer.ml
+++ b/test/ocaml/server/TestServer.ml
@@ -97,6 +97,8 @@
     let res = new xtruct in
       res#set_string_thing (sod a1);
       res
+  method testAsync i =
+    Unix.sleep (sod i)
 end;;
 
 let h = new test_handler in