4.4BSD/usr/src/contrib/news/inn/lib/lock.c

/*  $Revision: 1.8 $
**
**  InterNetNews replacement for C news system locking.
*/
#include <stdio.h>

static char	COMMAND[] = "ctlinnd %s Expire process %ld";
static int	IsLocked;


/*
**  C News debugging function.
/* ARGSUSED */
void
lockdebug(state)
    int		state;
{
}


/*
**  Lock the news system by telling the server to throttle input.
*/
void
newslock()
{
    char	buff[72];
    int		i;

    (void)sprintf(buff, COMMAND, "throttle", (long)getpid());
    i = system(buff) >> 8;
    if (i)
	error("Can't lock");
    IsLocked = 1;
}


/*
**  Unlock the system and reload the files.
*/
void
newsunlock()
{
    char	buff[72];
    int		i;

    if (IsLocked) {
	(void)sprintf(buff, COMMAND, "go", (long)getpid());
	i = system(buff) >> 8;
	if (i)
	    error("Can't reload");
	(void)sprintf(buff, "ctlinnd go");
	i = system(buff) >> 8;
	if (i)
	    error("Can't unlock");
	IsLocked = 0;
    }
}


/*
**  Print an error message, then unlock the system.
*/
void
errunlock(text, arg)
    char	*text;
    char	*arg;
{
    warning(text, arg);
    newsunlock();
    exit(1);
    /* NOTREACHED */
}