(There is room for improvement here... in some cases we could and should still perform partial allocation.)