Synchronization problems in uvm_driver

In reply to Sustrak:

My general rule for using clocking blocks is have your thread only use the clocking block event to block the process and nothing else.

task run_phase(uvm_phase phase);
    forever begin
        do begin
          @(vif.cb);
          seq_item_port.try_next_item(trans);
        end while (trans == null);
        vif.cb.sb_id   <= trans.sb_id;
        vif.cb.nxt_sen <= trans.nxt_sen;
        vif.cb.kill    <= trans.kill;
        @(vif.cb);
        vif.cb.nxt_sen <= 1'b0;
        vif.cb.kill    <= 1'b0;
        seq_item_port.item_done()  
    end
endtask