code: def _do_timeout_for_leave(self, timeout, datapath, dst, in_port):
          
          parser = datapath.ofproto_parser
          dpid = datapath.id
  
          hub.sleep(timeout)
          outport = self._to_querier[dpid]['port']
  
          if self._to_hosts[dpid][dst]['ports'][in_port]['out']:
              return
  
          del self._to_hosts[dpid][dst]['ports'][in_port]
          self._del_flow_entry(datapath, in_port, dst)
          actions = []
          ports = []
          for port in self._to_hosts[dpid][dst]['ports']:
              actions.append(parser.OFPActionOutput(port))
              ports.append(port)
  
          if len(actions):
              self._send_event(
                  EventMulticastGroupStateChanged(
                      MG_MEMBER_CHANGED, dst, outport, ports))
              self._set_flow_entry(
                  datapath, actions, outport, dst)
              self._to_hosts[dpid][dst]['leave'] = None
          else:
              self._remove_multicast_group(datapath, outport, dst)
              del self._to_hosts[dpid][dst]
docs: the process when the QUERY from the switch timeout expired.