In reply to chr_sue:
Pardon for the confusion. I have updated the code in my question. Refer to the comments in build and run phase of test. Uncommented the code as required.
// ***** in build phase
// Uncomment this to see that domain1 and domain2 are running independently
// uvm_config_db#(int)::set(this, "m_env1", "delay", 10);
// Uncomment this to see that domain1 also jumps when domain2 jumps to final phase
uvm_config_db#(int)::set(this, "m_env1", "delay", 100);
uvm_config_db#(int)::set(this, "m_env2", "delay", 100);
// ***** in run phase;
// Both domain1 and domain2 jumps to extract phase unexpectedly.
// Uncomment this for domain2 to jump to extract phase
domain2.jump(uvm_extract_phase::get());
// Both domain1 and domain2 jumps to repective phases other than extract phase. I would expect only domain2 to jump and wait and domain1 to continue phase execution.
// domain2 should wait till domain1 completes other phases
// Uncomment this for domain2 to jump to final phase
//domain2.jump(uvm_final_phase::get());
I have tried with all simulators at EDAPlayground and got the same results. I believe that this should be independent of simulator.