diff --git a/lib/flor/unit/caller.rb b/lib/flor/unit/caller.rb
index <HASH>..<HASH> 100644
--- a/lib/flor/unit/caller.rb
+++ b/lib/flor/unit/caller.rb
@@ -353,20 +353,21 @@ module Flor
 
       status = ProcessStatus.new(process, ex)
 
-      fail SpawnNonZeroExitError.new(status, i.read, f.read) \
+      fail SpawnNonZeroExitError.new(conf, { to: to, t0: t0 }, status, i, f) \
         if status.exitstatus != 0
 
       [ i.read, status ]
 
     rescue => err
 
-      add_details_to_error(conf, to, t0, pid, err)
-
-      Process.detach(pid) if pid
-
+      Process.detach(pid) \
+        if pid
       (Process.kill(9, pid) rescue nil) \
         unless Flor.no?(conf['on_error_kill'])
 
+      raise err if err.is_a?(SpawnError)
+      raise WrappedSpawnError.new(conf, { to: to, t0: t0, pid: pid }, err)
+
     ensure
 
       [ i, f ].each { |x| x.close rescue nil }
Rework caller SpawnError system (JRuby)