All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.darwinsys.io.NextFD Maven / Gradle / Ivy

package com.darwinsys.io;

/** Simple wrapper class for native nextfd method; nextfd is used to watch filedesc leaks.
 */
public class NextFD {

	private static final int INVALID_FD = -1;

	/** The name of the shared library */
	public static final String LIBRARY_NAME = "darwinsys";
	
	/** True if the shared library loaded successfully */
	private static boolean loaded;

	/** Native method to return the next available file descriptor.
	 * Obviously this will only work on POSIX-like systems that support the
	 * notion of numeric file descriptors, but it's a good technique for
	 * tracking file descriptor leaks in APIs used e.g., when indexing
	 * significant numbers of files.
	 */
	private static native int nextfd();
	
	/** Public method to try to return the next available file descriptor, if available.
	 * @return the next free system file descriptor, or INVALID_FD (-1) if not available.
	 */
	public static int getNextFD() {
		if (loaded) {
			return nextfd();
		}
		return INVALID_FD;
	}
	
	static {
		/** Load the .so or dll, set loaded = true if it succeeds. */
		try {
			System.loadLibrary(LIBRARY_NAME);
			loaded = true;
		} catch (UnsatisfiedLinkError e) {
			System.err.printf("*** Could not load the %s library (.so or .dll)%n",
				LIBRARY_NAME);
			System.err.println("This means that NextFD.getNextFD() will always return -1.");
			System.err.println("Please check that you have installed the shared library and");
			System.err.println("if necessary set your LD_LIBRARY_PATH or equivalent.");
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy