Uploaded image for project: 'Minecraft: Java Edition'
  1. Minecraft: Java Edition
  2. MC-73207

Minecraft server list displays "Can't connect to server" on startup

    XMLWordPrintable

Details

    • Icon: Bug Bug
    • Resolution: Fixed
    • Minecraft 18w02a
    • Minecraft 1.8, Minecraft 1.9, Minecraft 1.10.2, Minecraft 16w41a, Minecraft 16w42a, Minecraft 1.11.2, Minecraft 1.12.2, Minecraft 17w50a
    • Confirmed

    Description

      The bug

      Whenever I start my game and go onto the Multiplayer server list, the servers all say "Can't connect to server" but when I refresh the page, it says the normal servers MOTD in the listing.

      Code analysis (MCP names), comments, and additional note by MWisBest

      I've analyzed the issue and found it's a race condition with the multi-threaded server pinger code. The server pinging code (net.minecraft.client.network.ServerPinger) is run in multiple threads, and each thread calls net.minecraft.network.NetworkManager.createNetworkManagerAndConnect(). This function uses "lazy loaders" (net.minecraft.util.LazyLoadBase) to initialize some static variables. The issue lies in net.minecraft.util.LazyLoadBase.getValue(). This function is not thread-safe. Below you'll find the code in question with comments explaining exactly what is happening and how to fix it.

      package net.minecraft.util;
      
      public abstract class LazyLoadBase<T>
      {
          private T value;
          private boolean isLoaded;
      
          public T getValue() // NOT THREAD-SAFE. SIMPLE FIX: declare the method synchronized
          {
              if (!this.isLoaded) // Thread 1: Condition is true; Thread 2: Condition is false
              {
                  this.isLoaded = true; // Thread 1: SETS isLoaded to true, BUT VALUE IS STILL NULL
                  this.value = this.load();
              }
      
              return this.value; // Thread 2: RETURNS NULL because this.load() is not finished in Thread 1
          }
      
          protected abstract T load();
      }
      

      Note that depending on the speed of the computer, this bug might not occur. If the first thread finishes quickly enough everything will appear normal.

      Attachments

        Activity

          People

            Unassigned Unassigned
            xXDeadlyBlazeXx SpongerDanger
            Votes:
            12 Vote for this issue
            Watchers:
            8 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:
              CHK: