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

com.orientechnologies.nio.MemoryLockerLinux Maven / Gradle / Ivy

/*
  *
  *  *  Copyright 2014 Orient Technologies LTD (info(at)orientechnologies.com)
  *  *
  *  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  *  you may not use this file except in compliance with the License.
  *  *  You may obtain a copy of the License at
  *  *
  *  *       http://www.apache.org/licenses/LICENSE-2.0
  *  *
  *  *  Unless required by applicable law or agreed to in writing, software
  *  *  distributed under the License is distributed on an "AS IS" BASIS,
  *  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *  *  See the License for the specific language governing permissions and
  *  *  limitations under the License.
  *  *
  *  * For more information: http://www.orientechnologies.com
  *
  */

package com.orientechnologies.nio;

import com.sun.jna.Library;
import com.sun.jna.Native;

/**
 * @author Artem Loginov (logart2007-at-gmail.com)
 */
public interface MemoryLockerLinux extends Library {

  // http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Errors/unix_system_errors.html

  // #define EPERM 1 /* Operation not permitted */ The calling process does not have the appropriate privilege to perform the
  // requested operation.

  static final int  EPERM                                   = 1;

  // #define EAGAIN 11 /* Try again */ Some or all of the memory identified by the operation could not be locked when the call was
  // made.
  static final int  EAGAIN                                  = 11;

  // #define ENOMEM 12 /* Out of memory */ Locking all of the pages currently mapped into the address space of the process would
  // exceed an implementation-dependent limit on the amount of memory that the process may lock.
  static final int  ENOMEM                                  = 12;

  // #define EINVAL 22 /* Invalid argument */ The flags argument is zero, or includes unimplemented flags.
  static final int  EINVAL                                  = 22;

  // #define ENOSYS 38 /* Function not implemented */ The implementation does not support this memory locking interface.
  static final int  ENOSYS                                  = 38;

  // Linux/include/asm-generic/mman.h
  //
  // 16 #define MCL_CURRENT 1 /* lock all current mappings */
  // 17 #define MCL_FUTURE 2 /* lock all future mappings */

  static final int  LOCK_CURRENT_MEMORY                     = 1;
  static final int  LOCK_ALL_MEMORY_DURING_APPLICATION_LIFE = 2;

  MemoryLockerLinux INSTANCE                                = (MemoryLockerLinux) Native.loadLibrary("c", MemoryLockerLinux.class);

  /**
   * This method locks all memory under *nix operating system using kernel function {@code mlockall}. details of this function you
   * can find on {@see http://www.kernel.org/doc/man-pages/online/pages/man2/mlock.2.html}
   * 
   * @param flags
   *          determines lock memory on startup or during life of application.
   * 
   * @return Upon successful completion, the mlockall() function returns a value of zero. Otherwise, no additional memory is locked,
   *         and the function returns a value of -1 and sets errno to indicate the error. The effect of failure of mlockall() on
   *         previously existing locks in the address space is unspecified. If it is supported by the implementation, the
   *         munlockall() function always returns a value of zero. Otherwise, the function returns a value of -1 and sets errno to
   *         indicate the error.
   */
  int mlockall(int flags);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy