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
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_ <<
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;
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)
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