anchor.diff:  	 exit_many_many_tables_owner/1]).
   -export([write_concurrency/1, heir/1, give_away/1, setopts/1]).
   -export([bad_table/1, types/1]).
  +-export([otp_9423/1]).
   
   -export([init_per_testcase/2, end_per_testcase/2]).
   %% Convenience for manual testing
  
positive.code:     State;
  worker_loop(_, _, [end_of_work|State]) ->
      State;
  worker_loop(N, ExecF, State) ->
      worker_loop(N-1,ExecF,ExecF(State)).
      
  
negative.code:     add_lists(T1, T2, [E1+E2 | Acc]).    
  
  run_workers(InitF,ExecF,FiniF,Laps) ->
      run_workers(InitF,ExecF,FiniF,Laps, 0).
  run_workers(InitF,ExecF,FiniF,Laps, Exclude) ->
      case erlang:system_info(smp_support) of
  	true ->
  	    run_workers_do(InitF,ExecF,FiniF,Laps, Exclude);
  	false ->
  	    {skipped,"No smp support"}
      end.
  
  run_workers_do(InitF,ExecF,FiniF,Laps) ->
      run_workers_do(InitF,ExecF,FiniF,Laps, 0).
  run_workers_do(InitF,ExecF,FiniF,Laps, Exclude) ->
      ?line NumOfProcs = case erlang:system_info(schedulers) of
  			   N when (N > Exclude) -> N - Exclude
  		       end,
      io:format("smp starting ~p workers\n",[NumOfProcs]),
      Seeds = [{ProcN,random:uniform(9999)} || ProcN <- lists:seq(1,NumOfProcs)],
      Parent = self(),
      Pids = [spawn_link(fun()-> worker(Seed,InitF,ExecF,FiniF,Laps,Parent,NumOfProcs) end)
  	    || Seed <- Seeds],
      case Laps of
  	infinite -> Pids;
  	_ -> wait_pids(Pids)
      end.
  	    
  worker({ProcN,Seed}, InitF, ExecF, FiniF, Laps, Parent, NumOfProcs) ->
      io:format("smp worker ~p, seed=~p~n",[self(),Seed]),
  