From 5ebb23b3e11dbae53afc395336b165455e1ff12c Mon Sep 17 00:00:00 2001 From: Kevin Clark Date: Mon, 28 Jul 2008 22:16:28 +0000 Subject: [PATCH] rb: Ensure the transport is closed if an exception is raised serializing data in Client.send_message [THRIFT-75] Author: Kevin Ballard git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@680538 13f79535-47bb-0310-9956-ffa450edef68 --- lib/rb/lib/thrift/client.rb | 7 ++++++- lib/rb/spec/client_spec.rb | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/rb/lib/thrift/client.rb b/lib/rb/lib/thrift/client.rb index 8f9b96a9..997923ae 100644 --- a/lib/rb/lib/thrift/client.rb +++ b/lib/rb/lib/thrift/client.rb @@ -12,7 +12,12 @@ module Thrift args.each do |k, v| data.send("#{k.to_s}=", v) end - data.write(@oprot) + begin + data.write(@oprot) + rescue StandardError => e + @oprot.trans.close + raise e + end @oprot.write_message_end @oprot.trans.flush end diff --git a/lib/rb/spec/client_spec.rb b/lib/rb/spec/client_spec.rb index b92bbec4..980552be 100644 --- a/lib/rb/spec/client_spec.rb +++ b/lib/rb/spec/client_spec.rb @@ -65,5 +65,17 @@ class ThriftClientSpec < Spec::ExampleGroup end lambda { @client.receive_message(nil) }.should raise_error(StandardError) end + + it "should close the transport if an error occurs while sending a message" do + @prot.stub!(:write_message_begin) + @prot.should_not_receive(:write_message_end) + mock_args = mock("#") + mock_args.should_receive(:write).with(@prot).and_raise(StandardError) + trans = mock("MockTransport") + @prot.stub!(:trans).and_return(trans) + trans.should_receive(:close) + klass = mock("TestMessage_args", :new => mock_args) + lambda { @client.send_message("testMessage", klass) }.should raise_error(StandardError) + end end end -- 2.17.1