#include <ncbi.h>
#include <gishlib.h>
#include <signal.h>

sigset_t	vec, vecsave;
static char	once, vecset;

void
critical_begin()
{
	sigset_t	vectmp;

	if (!once) {
		sigfillset(&vec);
		once = 1;
	}

	if (vecset)
		return;
	sigprocmask(SIG_BLOCK, &vec, &vectmp);
	if (vecset)
		return;
	vecset = 1;
	Nlm_MemCpy((CharPtr)&vecsave, (CharPtr)&vectmp, sizeof(vecsave));
	return;
}

void
critical_end()
{
	if (!vecset)
		return;
	vecset = 0;
	sigprocmask(SIG_SETMASK, &vecsave, NULL);
	return;
}
