コード例 #1
0
ファイル: X11Util.java プロジェクト: petr-s/jogl
 public static void dumpPendingDisplayConnections() {
   synchronized (globalLock) {
     System.err.println(
         "X11Util: Reusable X11 Display Connections: " + reusableDisplayList.size());
     for (int i = 0; i < reusableDisplayList.size(); i++) {
       NamedDisplay ndpy = (NamedDisplay) reusableDisplayList.get(i);
       System.err.println("X11Util: Reusable[" + i + "]: " + ndpy);
       if (null != ndpy) {
         Throwable t = ndpy.getCreationStack();
         if (null != t) {
           t.printStackTrace();
         }
       }
     }
     System.err.println(
         "X11Util: Pending X11 Display Connections (creation order): "
             + pendingDisplayList.size());
     for (int i = 0; i < pendingDisplayList.size(); i++) {
       NamedDisplay ndpy = (NamedDisplay) pendingDisplayList.get(i);
       System.err.println("X11Util: Pending[" + i + "]: " + ndpy);
       if (null != ndpy) {
         Throwable t = ndpy.getCreationStack();
         if (null != t) {
           t.printStackTrace();
         }
       }
     }
   }
 }
コード例 #2
0
ファイル: X11Util.java プロジェクト: petr-s/jogl
 /**
  * Closing pending Display connections in original creation order, if {@link
  * #getMarkAllDisplaysUnclosable()} is true.
  *
  * @return number of closed Display connections
  */
 private static int closePendingDisplayConnections() {
   int num = 0;
   synchronized (globalLock) {
     if (getMarkAllDisplaysUnclosable()) {
       for (int i = 0; i < pendingDisplayList.size(); i++) {
         final NamedDisplay ndpy = (NamedDisplay) pendingDisplayList.get(i);
         if (DEBUG) {
           final boolean closeAttempted = !openDisplayMap.containsKey(ndpy.getHandle());
           System.err.println(
               "X11Util.closePendingDisplayConnections(): Closing ["
                   + i
                   + "]: "
                   + ndpy
                   + " - closeAttempted "
                   + closeAttempted);
         }
         XCloseDisplay(ndpy.getHandle());
         num++;
       }
       if (DEBUG) {
         System.err.println(
             "X11Util.closePendingDisplayConnections(): Closed "
                 + num
                 + " pending display connections");
       }
     }
   }
   return num;
 }
コード例 #3
0
ファイル: X11Util.java プロジェクト: petr-s/jogl
 public static boolean markDisplayUncloseable(long handle) {
   NamedDisplay ndpy;
   synchronized (globalLock) {
     ndpy = (NamedDisplay) openDisplayMap.get(handle);
   }
   if (null != ndpy) {
     ndpy.setUncloseable(true);
     return true;
   }
   return false;
 }
コード例 #4
0
ファイル: X11Util.java プロジェクト: petr-s/jogl
 public static void dumpOpenDisplayConnections() {
   synchronized (globalLock) {
     System.err.println("X11Util: Open X11 Display Connections: " + openDisplayList.size());
     for (int i = 0; i < openDisplayList.size(); i++) {
       NamedDisplay ndpy = openDisplayList.get(i);
       System.err.println("X11Util: Open[" + i + "]: " + ndpy);
       if (null != ndpy) {
         Throwable t = ndpy.getCreationStack();
         if (null != t) {
           t.printStackTrace();
         }
       }
     }
   }
 }
コード例 #5
0
ファイル: X11Util.java プロジェクト: petr-s/jogl
  /** Returns a created or reused named display. */
  public static long openDisplay(String name) {
    long dpy = 0;
    NamedDisplay namedDpy = null;
    name = validateDisplayName(name);
    boolean reused = false;

    synchronized (globalLock) {
      for (int i = 0; i < reusableDisplayList.size(); i++) {
        if (reusableDisplayList.get(i).getName().equals(name)) {
          namedDpy = reusableDisplayList.remove(i);
          dpy = namedDpy.getHandle();
          reused = true;
          break;
        }
      }
      if (0 == dpy) {
        dpy = XOpenDisplay(name);
        if (0 == dpy) {
          throw new NativeWindowException(
              "X11Util.Display: Unable to create a display("
                  + name
                  + ") connection. Thread "
                  + Thread.currentThread().getName());
        }
        // if you like to debug and synchronize X11 commands ..
        // setSynchronizeDisplay(dpy, true);
        namedDpy = new NamedDisplay(name, dpy);
        pendingDisplayList.add(namedDpy);
      }
      namedDpy.addRef();
      openDisplayMap.put(dpy, namedDpy);
      openDisplayList.add(namedDpy);
      if (markAllDisplaysUnclosable) {
        namedDpy.setUncloseable(true);
      }
    }
    if (DEBUG) {
      System.err.println(
          "X11Util.Display: openDisplay [reuse "
              + reused
              + "] "
              + namedDpy
              + ". Thread "
              + Thread.currentThread().getName());
      // Thread.dumpStack();
    }
    return namedDpy.getHandle();
  }
コード例 #6
0
ファイル: X11Util.java プロジェクト: petr-s/jogl
  public static void closeDisplay(long handle) {
    synchronized (globalLock) {
      final NamedDisplay namedDpy = (NamedDisplay) openDisplayMap.remove(handle);
      if (null == namedDpy) {
        X11Util.dumpPendingDisplayConnections();
        throw new RuntimeException(
            "X11Util.Display: Display(0x"
                + Long.toHexString(handle)
                + ") with given handle is not mapped. Thread "
                + Thread.currentThread().getName());
      }
      if (namedDpy.getHandle() != handle) {
        X11Util.dumpPendingDisplayConnections();
        throw new RuntimeException(
            "X11Util.Display: Display(0x"
                + Long.toHexString(handle)
                + ") Mapping error: "
                + namedDpy
                + ". Thread "
                + Thread.currentThread().getName());
      }

      namedDpy.removeRef();
      if (!openDisplayList.remove(namedDpy)) {
        throw new RuntimeException("Internal: " + namedDpy);
      }

      if (markAllDisplaysUnclosable) {
        // if set-mark 'slipped' this one .. just to be safe!
        namedDpy.setUncloseable(true);
      }
      if (!namedDpy.isUncloseable()) {
        XCloseDisplay(namedDpy.getHandle());
        pendingDisplayList.remove(namedDpy);
      } else {
        // for reuse
        X11Lib.XSync(namedDpy.getHandle(), true); // flush output buffer and discard all events
        reusableDisplayList.add(namedDpy);
      }

      if (DEBUG) {
        System.err.println(
            "X11Util.Display: Closed (real: "
                + (!namedDpy.isUncloseable())
                + ") "
                + namedDpy
                + ". Thread "
                + Thread.currentThread().getName());
      }
    }
  }