Generic Question regarding CoRoutines, IEnumerator best practice?

To start my code works and functions, but I am still new and wonder if my method might be a little sloppy or if it would cause performance issues in bigger games down the line. I am calling the code below for player respawn, from my method that checks to see if the game is over. What I am curious about is do I need to be using a break or something to stop the coroutine when it completes to make my code more performance compliant?

    public void GameOver ()
    {
        playerLives -= 1;
        livesText.text = "x " + playerLives;

        if (playerLives > 0)
        {
            StartCoroutine(spawnPlayer());
        }

        if (playerLives <= 0)
        {
            gameOverText.text = "Game Over!";
            gameOver = true;
            audioSource.Play();
        }
       
    }
    IEnumerator spawnPlayer()
    {
        yield return new WaitForSeconds(plySpawnWait);

        Instantiate(player);
    }

My concern might be completely unfounded, I am just wondering if this is leaving an unnecessary coroutine running when it has already completed its purpose.

no need to stop it, your are not looping or anything in the coroutine, so all it will do is yield for the time you told it to, instance the player, than stop.

Thank you, I was fairly sure that is the case, but I wanted to make sure. Try to stop bad habits early and all that.

When that coroutine reaches its end, there is an implicit “yield break” that gets executed, which tells Unity that this object is “exhausted” and Unity will remove it from its update loop nice and clean.