static const off_t kMinWarnMemoryLimit = VM_MEMORY_RESERVE_USER; static const off_t kMinCriticalMemoryLimit = VM_MEMORY_RESERVE_SYSTEM; static off_t sNoteMemoryLimit; static off_t sWarnMemoryLimit; static off_t sCriticalMemoryLimit; static int32 sLowPagesState = B_NO_LOW_RESOURCE; static int32 sLowMemoryState = B_NO_LOW_RESOURCE; static int32 sLowSemaphoresState = B_NO_LOW_RESOURCE; static int32 sLowSpaceState = B_NO_LOW_RESOURCE; static uint32 sLowResources = 0; // resources that are not B_NO_LOW_RESOURCE static bigtime_t sLastMeasurement; static recursive_lock sLowResourceLock = RECURSIVE_LOCK_INITIALIZER("low resource"); static sem_id sLowResourceWaitSem; static HandlerList sLowResourceHandlers; static ConditionVariable sLowResourceWaiterCondition; static int32 low_resource_state_no_update(uint32 resources) { int32 state = B_NO_LOW_RESOURCE; if ((resources & B_KERNEL_RESOURCE_PAGES) != 0) state = max_c(state, sLowPagesState); if ((resources & B_KERNEL_RESOURCE_MEMORY) != 0) state = max_c(state, sLowMemoryState);
// a handle returned by load_library() (dlopen()) #define RLD_GLOBAL_SCOPE ((void*)-2l) static const char* const kLockName = "runtime loader"; typedef void (*init_term_function)(image_id); bool gProgramLoaded = false; image_t* gProgramImage; static image_t** sPreloadedImages = NULL; static uint32 sPreloadedImageCount = 0; static recursive_lock sLock = RECURSIVE_LOCK_INITIALIZER(kLockName); static inline void rld_lock() { recursive_lock_lock(&sLock); } static inline void rld_unlock() { recursive_lock_unlock(&sLock); }