Forever and wait calls inside a fork

I have this below thread forked in a top level thread. For some reason I see only index 0 print is seen but not other instances from for loop. I was expected multiple prints of “inside for late” where it later forks multiple threads. Any help appreciated as to why only idx=0 gets executed.

     begin : late
              for (int idx=0; idx<`RESCTRL_VAL_NUM_QCH_LATE; idx++) begin
                 automatic int i = idx;
                 `uvm_info("debug", $psprintf("inside for late[%0d]",i), UVM_LOW)
                 fork
                 begin
                    forever begin
                        `uvm_info("debug", "inside late", UVM_LOW)
                        wait(l_fsm_queue[i].size() > 0);
                        late_str = $sformatf("l_fsm_q_%0d",i);
                        `uvm_info("RC_SB", $psprintf("RC_SB: late_str : %s", late_str), UVM_LOW)
                        rc_raise_objection(late_str, l_fsm_queue[i].size());
                        rc_objection_timeout_check(late_str, l_fsm_queue[i].size(), timeout_err);
                        rc_drop_objection(late_str, l_fsm_queue[i].size());
                        if (timeout_err == 1) wait (l_fsm_queue[i].size() == 0);
                    end
                 end
                 join
              end
           end : late

In reply to shaky005:

You should use join_none instead of join.