Dump our output buffer if a plugin crashes.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 30 Oct 2015 01:20:46 +0000 (21:20 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Fri, 30 Oct 2015 01:20:46 +0000 (21:20 -0400)
bin/mailshears

index a218b2b486c321aa462380f727c80e9b6d35a97e..4d69f8fb67ab2df8a7615e4601b01e8228617a84 100755 (executable)
@@ -91,13 +91,19 @@ require 'stringio'
 output_buffer = StringIO.new()
 $stdout = output_buffer
 
 output_buffer = StringIO.new()
 $stdout = output_buffer
 
-plugin_module.run(cfg, *ARGV)
-
-# Restore stdout, and print the header plus whatever the plugins
-# produced if they produced anything. If they didn't, we avoid
-# printing the header.
-$stdout = STDOUT
-if output_buffer.size > 0 then
-  puts make_header(plugin_module.to_s())
-  puts output_buffer.string()
+begin
+  plugin_module.run(cfg, *ARGV)
+ensure
+  # Now restore stdout, and print the header plus whatever the plugins
+  # produced if they produced anything. If they didn't produce any
+  # output, then we avoid printing the header.
+  #
+  # This gets wrapped in an "ensure" block because otherwise, if
+  # plugin_module.run() crashes, the traceback will get stored in
+  # output_buffer and never get printed.
+  $stdout = STDOUT
+  if output_buffer.size > 0 then
+    puts make_header(plugin_module.to_s())
+    puts output_buffer.string()
+  end
 end
 end