def scheduleMakeNewLinks(self):
        # Call this whenever a new sync'd node is added
        # Or when a connected link dies

        # This never needs to run more than once per reactor loop
        if self.makeNewLinks_dcall:
            return

        def cb():
            self.makeNewLinks_dcall = None

            osm = self.main.osm

            # Make sure the K closest nonbroken nodes are marked as outbound
            n_alive = 0
            for n in osm.nodes:
                try:
                    pn = self.pnbs[n.ipp]
                except KeyError:
                    pn = self.pnbs[n.ipp] = self.PingNeighbor(n.ipp)

                if not pn.outbound:

                    if not pn.inbound:
                        # Completely new link
                        tries = 2

                    elif pn.stronglyConnected():
                        # An active inbound link is being marked as outbound,
                        # so we might want to close some other outbound
                        # link.  Note that this won't run until the next
                        # reactor loop.
                        self.scheduleChopExcessLinks()
                        tries = 4

                    else:
                        # Existing link, not strongly connected yet
                        tries = 2

                    pn.outbound = True
                    self.pingWithRetransmit(pn, tries=tries, later=False)

                if pn.outbound and pn.stillAlive():
                    n_alive += 1
                    if n_alive >= self.OUTLINK_GOAL:
                        break

        self.makeNewLinks_dcall = reactor.callLater(0, cb)