I reformatted your code for a little more readability. Looking at it, your problem becomes more obvious:
$rd = $db->Query("SELECT usp_tracking_number from am_ups_shipment_package_reference");
$i = 0;
while ($flag=true && $i < $rd->Row_Count())
{
$tuple=$rd->Fetch_Row($i);
if($tuple["usp_tracking_number"]=$tn)
{
$flag=false;
if(Is_Array($shipment))
{
$query = "UPDATE am_ups_shipment SET
us_delivery_date=to_timestamp($shipment[us_delivery_date]),
us_delivery_time=$shipment[us_delivery_time],
us_billto_option=$shipment[us_billto_option],
us_billto_number='$shipment[us_billto_number]',
us_shipper_id='$shipment[us_shipper_id]'
WHERE us_id in (select us_id from am_ups_shipment_package_reference where usp_tracking_number='$tn');";
$rn = $db->Query($query);
} //end if(Is_Array($shipment)) test
$query1="UPDATE am_ups_shipment_location SET
usl_ups_id='$shipmentt[us_shipper_id]'
WHERE usl_id='$shipment[us_shipper_id]';";
$rn1 = $db->Query($query1);
$ship_ref1=Array();
if(Is_Array($ship_ref))
{
$ship_ref1["usr_code"]=$ship_ref[0]["usr_code"];
$ship_ref1["usr_value"]=$ship_ref[0]["usr_value"];
$query2 = "UPDATE am_ups_shipment_reference SET
usr_code='$ship_ref1[usr_code]',
usr_value='$ship_ref1[usr_value]'
WHERE us_id in (select us_id from am_ups_shipment_package_reference where usp_tracking_number='$tn');";
$rnn=$db->Query($query2);
} //end if(Is_Array($ship_ref)) test
if(Is_Array($ship_ref_pack))
{
$query3 = "UPDATE am_ups_shipment_package_reference SET
uspr_code='$ship_ref_pack[uspr_code]',
uspr_value='$ship_ref_pack[uspr_value]'
WHERE us_id in (select us_id from am_ups_shipment_package_reference where usp_tracking_number='$tn');";
$rn2 = $db->Query($query3);
} //end if(Is_Array($ship_ref_pack)) test
} //end if($tuple["usp_tracking_number"]=$tn) test
} //end while loop
$i++;
echo "insert";
$this->Write_UPS($shipment,$ship_ref,$ship_ref_pack,$sp);
}//extra end bracket...
As you can see, you have an extra bracket in there you don't need. I'm surprised PHP didn't throw up an execution error. As for the infinite loop, you can now see $i++ falls outside of your while loop, thereby not executing...