The flag way should work, Here's code I use in one of my projects to acheive what you're trying to.

    class Vendor_Modulename_Model_Observer
    {

    	public $eventComplete = false;
    
    	function sales_quote_collect_totals_after()
    	{
    
    		if($this->eventComplete){return;}
    
    		$this->eventComplete = true;

           // put module code below here

         }
    
    }