-#define HI_WATER_DEFAULT 40000000
-#define MINIMUM_SIZE (1024 * 1024 * 64)
-#define MAXIMUM_SIZE (1024 * 1024 * 1024)
-
-#define MAX_LIMITS 8
-
-
-struct limit {
- unsigned int size;
- unsigned int low_water;
-} limits[MAX_LIMITS];
-
-
-int debug = 0;
-int max_valid = 0;
-int file_count = 0;
-unsigned int hi_water;
-unsigned int local_hi_water;
-int priority = 0;
-int options = 0;
-char fileroot[512];
-
-
-/* global parameters for application notification option */
-mach_port_t trigger_port = MACH_PORT_NULL;
-mach_port_t notify_port = MACH_PORT_NULL;
-unsigned int notify_high = 0;
-unsigned int bs_recovery;
-
-/*
-void setprof __P((struct kvmvars *kvp, int state));
-void dumpstate __P((struct kvmvars *kvp));
-void reset __P((struct kvmvars *kvp));
-*/
-
-
-
-mach_msg_return_t
-server_alert_loop(
- mach_msg_size_t max_size,
- mach_port_t rcv_name,
- mach_msg_options_t options)
-{
- mig_reply_error_t *bufRequest = 0, *bufReply = 0;
- register mach_msg_return_t mr;
- register kern_return_t kr;
-
- if ((kr = vm_allocate(mach_task_self(),
- (vm_address_t *)&bufRequest,
- max_size + MAX_TRAILER_SIZE,
- TRUE)) != KERN_SUCCESS)
- return kr;
- if ((kr = vm_protect(mach_task_self(),
- (vm_address_t)bufRequest,
- max_size + MAX_TRAILER_SIZE,
- FALSE, VM_PROT_ALL)) != KERN_SUCCESS)
- return kr;
- mlock(bufRequest, max_size + MAX_TRAILER_SIZE);
- if ((kr = vm_allocate(mach_task_self(),
- (vm_address_t *)&bufReply,
- max_size + MAX_TRAILER_SIZE,
- TRUE)) != KERN_SUCCESS)
- return kr;
- if ((kr = vm_protect(mach_task_self(),
- (vm_address_t)bufReply,
- max_size + MAX_TRAILER_SIZE,
- FALSE, VM_PROT_ALL)) != KERN_SUCCESS)
- return kr;
- mlock(bufReply, max_size + MAX_TRAILER_SIZE);
- while(TRUE) {
- mr = mach_msg_overwrite_trap(&bufRequest->Head, MACH_RCV_MSG|options,
- 0, max_size, rcv_name,
- MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL,
- (mach_msg_header_t *) 0, 0);
- if (mr == MACH_MSG_SUCCESS) {
- /* we have a request message */
-
- if(!(default_pager_alerts_server(
- &bufRequest->Head, &bufReply->Head)))
- backing_store_triggers_server(
- &bufRequest->Head, &bufReply->Head);
-
- if (!(bufReply->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) &&
- bufReply->RetCode != KERN_SUCCESS) {
- if (bufReply->RetCode == MIG_NO_REPLY)
- /*
- * This return code is a little tricky--
- * it appears that the demux routine found an
- * error of some sort, but since that error
- * would not normally get returned either to
- * the local user or the remote one, we pretend it's
- * ok.
- */
-
- bufRequest->Head.msgh_remote_port = MACH_PORT_NULL;
- mach_msg_destroy(&bufRequest->Head);
- continue;
- }
-
- if (bufReply->Head.msgh_remote_port == MACH_PORT_NULL) {
- /* no reply port, so destroy the reply */
- if (bufReply->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX)
- mach_msg_destroy(&bufReply->Head);
- } else {
- break;
- }
- } else {
- break;
- }
- }
-
- (void)vm_deallocate(mach_task_self(),
- (vm_address_t) bufRequest,
- max_size + MAX_TRAILER_SIZE);
- (void)vm_deallocate(mach_task_self(),
- (vm_address_t) bufReply,
- max_size + MAX_TRAILER_SIZE);
- return KERN_FAILURE;
-
-}
-