/*
 * Copyright 1988, 1989, 1990, 1991 Massachusetts Institute of Technology
 */
#include <stdio.h>
#include "structs.h"

static int num_locks = 0;
static Server *locks[100];

add_lock(fd)
     Server *fd;
{
  int i;
  for (i = 0; i < num_locks; i++)
    if (fd == locks[i]) return(0);
  locks[num_locks++] = fd;
  if (GLock(fd) == GIO_ERROR) {
    need_to_rebuild_list = 1;
    bsdsyslog(LOG_NOTICE,"remote server lock: GIO_ERROR");
    return(-1);
  }
  return(0);
}

unlock_all()
{
  int i;

  if (LOCKED) return;

  for (i = 0; i < num_locks; i++)
  if (GUnLock(locks[i]) == GIO_ERROR) {
    need_to_rebuild_list = 1;
    bsdsyslog(LOG_NOTICE,"remote server unlock: GIO_ERROR");
  }
  num_locks = 0;
}

clear_locks()
{
  num_locks = 0;
}


#ifndef FORKLOCK
/* Stuff for dealing with unlocking after a given time */
set_lock()
{
  struct itimerval set_time;
  
  set_time.it_value.tv_sec = MAX_LOCK_TIME;
  set_time.it_value.tv_usec = 
    set_time.it_interval.tv_sec =
      set_time.it_interval.tv_usec = 0;

  setitimer(ITIMER_REAL, &set_time, NULL);
}

unset_lock()
{
  struct itimerval set_time;
  
  set_time.it_value.tv_sec = 
    set_time.it_value.tv_usec = 
      set_time.it_interval.tv_sec =
	set_time.it_interval.tv_usec = 0;

  setitimer(ITIMER_REAL, &set_time, NULL);
}
#endif /* FORKLOCK */
