Dropping the last uvm objection

My understanding is after dropping the last UVM objection, any outstanding active threads would get killed. It is equivalent to $finish which we typically use in SV only test benches.

Is this correct? and are there any exceptions (how can we introduce an infinite loop which prevents the simulation from finishing after the last objection, we may get this in a few different ways but just a basic example)?

Just trying to understand how the simulations will end.

In reply to hsam:

Dropping the last objection to a phase kills all the threads associated with that phase. The UVM then proceeds to the function phases: extract, check, report, final. If you were a bad programmer, you could introduce an infinite loop in any of those phases. After the final phase, the UVM calls $finish (or returns from run_test with finish_on_completion = 0).