···30303131 def server_init(module, arg, _options, parent, scheduler_pid)
3232 when is_atom(module) and is_pid(parent) and is_pid(scheduler_pid) do
3333- SimServer.set_scheduler_pid(scheduler_pid)
3434-3533 {:ok, initial_state} = module.init(arg)
3634 Scheduler.send(scheduler_pid, parent, {:ack, self()})
3735
+2-9
lib/construct/sim_server.ex
···267267 def spawn(fun) when is_function(fun) do
268268 case get_scheduler_pid() do
269269 scheduler_pid when is_pid(scheduler_pid) ->
270270- Scheduler.spawn_and_yield(scheduler_pid, :nolink, __MODULE__, :sim_apply, [scheduler_pid, fun, []])
270270+ Scheduler.spawn_and_yield(scheduler_pid, :nolink, Kernel, :apply, [fun, []])
271271 nil ->
272272 Kernel.spawn(fun)
273273 end
···277277 def spawn_link(fun) when is_function(fun) do
278278 case get_scheduler_pid() do
279279 scheduler_pid when is_pid(scheduler_pid) ->
280280- Scheduler.spawn_and_yield(scheduler_pid, :link, __MODULE__, :sim_apply, [scheduler_pid, fun, []])
280280+ Scheduler.spawn_and_yield(scheduler_pid, :link, Kernel, :apply, [fun, []])
281281 nil ->
282282 Kernel.spawn_link(fun)
283283 end
284284- end
285285-286286- @doc false
287287- # Like apply/2 but also injects the scheduler_pid into the child process
288288- def sim_apply(scheduler_pid, fun, args) when is_pid(scheduler_pid) and is_function(fun) do
289289- set_scheduler_pid(scheduler_pid)
290290- apply(fun, args)
291284 end
292285293286 @spec sleep(non_neg_integer) :: term