docs: def sync_connect_master(self, timeout=None, failed=False):
          '''
          Block until we are connected to a master
          '''
          self._sync_connect_master_success = False
          log.debug("sync_connect_master")
  
          def on_connect_master_future_done(future):
              self._sync_connect_master_success = True
              self.io_loop.stop()
  
          self._connect_master_future = self.connect_master(failed=failed)
          # finish connecting to master
          self._connect_master_future.add_done_callback(on_connect_master_future_done)
          if timeout:
              self.io_loop.call_later(timeout, self.io_loop.stop)
          try:
              self.io_loop.start()
          except KeyboardInterrupt:
              self.destroy()
          # I made the following 3 line oddity to preserve traceback.
          # Please read PR #23978 before changing, hopefully avoiding regressions.
          # Good luck, we're all counting on you.  Thanks.
          if self._connect_master_future.done():
              future_exception = self._connect_master_future.exception()
              if future_exception:
                  # This needs to be re-raised to preserve restart_on_error behavior.
                  raise six.reraise(*future_exception)
          if timeout and self._sync_connect_master_success is False:
              raise SaltDaemonNotRunning('Failed to connect to the salt-master')