anchor.diff:                wait_for_process_to_die(Pid),
                 _ = [ wait_for_table_to_disappear(Pid, Tab) || Tab <- Tables ],
                 supervisor:delete_child(SupPid, Id)
  +          catch
  +              % child may not exist any more due to a parallel process terminating it
  +              exit:{killed, _} -> ok;
  +              exit:{noproc, _} -> ok;
  +              % exit reason may encapsulate a previous failure
  +              exit:{{killed, _}, _} -> ok;
  +              exit:{{noproc, _}, _} -> ok
             end ||  {Id, Pid, Type, _Module} <- ChildSpecs,
  -                  Pid =/= undefined ],
  +                  Pid =/= undefined, is_process_alive(Pid) ],
       ok.
   
   -spec wait_for(fun(() -> any())) -> ok.
  
positive.code:                   _ -> ok
                end
            end ||  {_Id, Pid, _Type, _Module} <- ChildSpecs,
                    Pid =/= undefined ],
      _ = [ begin
                case Type of
                    supervisor ->
                        supervisor_terminate_childs(Pid);
  
negative.code:                          Pid       -> not is_process_alive(Pid)
                       end
               end);
  wait_for_process_to_die(Pid) when is_pid(Pid) ->
      wait_for(fun() -> not is_process_alive(Pid) end).
  
  -spec wait_for_table_to_disappear(Pid::pid(), tid() | atom()) -> ok.
  