THRIFT-3335 Ruby server does not handle processor exception
Client: Ruby
Patch: Nobuaki Sukegawa <nsukeg@gmail.com>

This closes #612
diff --git a/lib/rb/lib/thrift/processor.rb b/lib/rb/lib/thrift/processor.rb
index 5d9e0a1..b96fb43 100644
--- a/lib/rb/lib/thrift/processor.rb
+++ b/lib/rb/lib/thrift/processor.rb
@@ -26,16 +26,18 @@
     def process(iprot, oprot)
       name, type, seqid  = iprot.read_message_begin
       if respond_to?("process_#{name}")
-        send("process_#{name}", seqid, iprot, oprot)
+        begin
+          send("process_#{name}", seqid, iprot, oprot)
+        rescue => e
+          x = ApplicationException.new(ApplicationException::INTERNAL_ERROR, 'Internal error')
+          write_error(x, oprot, name, seqid)
+        end
         true
       else
         iprot.skip(Types::STRUCT)
         iprot.read_message_end
         x = ApplicationException.new(ApplicationException::UNKNOWN_METHOD, 'Unknown function '+name)
-        oprot.write_message_begin(name, MessageTypes::EXCEPTION, seqid)
-        x.write(oprot)
-        oprot.write_message_end
-        oprot.trans.flush
+        write_error(x, oprot, name, seqid)
         false
       end
     end
@@ -53,5 +55,14 @@
       oprot.write_message_end
       oprot.trans.flush
     end
+
+    def write_error(err, oprot, name, seqid)
+      p 'write_error'
+      oprot.write_message_begin(name, MessageTypes::EXCEPTION, seqid)
+      err.write(oprot)
+      oprot.write_message_end
+      oprot.trans.flush
+      p 'write_error end'
+    end
   end
 end