private static int findFreePort() {
   try {
     final ServerSocket serverSocket = new ServerSocket(0);
     try {
       return serverSocket.getLocalPort();
     } finally {
       // workaround for linux : calling close() immediately after opening socket
       // may result that socket is not closed
       synchronized (serverSocket) {
         try {
           serverSocket.wait(1);
         } catch (Throwable ignored) {
         }
       }
       serverSocket.close();
     }
   } catch (IOException e) {
     e.printStackTrace(System.err);
     return JavacServer.DEFAULT_SERVER_PORT;
   }
 }