-static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/worker.c,v 6.10 2001-11-14 17:18:52 hadaq Exp $";
+static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/worker.c,v 6.11 2001-11-15 12:59:54 hadaq Exp $";
#define _POSIX_C_SOURCE 199309L
{
Worker *retVal;
Worker *my;
- int s0;
- int s1;
if (NULL == (my = malloc(sizeof(Worker)))) {
syslog(LOG_ERR, "%s:%d: %s", __FILE__, __LINE__, strerror(errno));
my->pid = getpid();
my->isStandalone = isStandalone;
- if (!my->isStandalone) {
- s0 = SIGUSR1;
- s1 = SIGUSR2;
- } else {
- s0 = SIGINT;
- s1 = SIGTERM;
- }
-
- if (-1 == installSigHandlers(my, s0, s1, sigHandler)) {
+ if (-1 == installSigHandlers(my, SIGINT, SIGTERM, sigHandler)) {
syslog(LOG_DEBUG, "%s:%d: %s", __FILE__, __LINE__, strerror(errno));
+ Worker_fini(my);
retVal = NULL;
} else if (-1 == createStatShm(my)) {
syslog(LOG_DEBUG, "%s:%d: %s", __FILE__, __LINE__, strerror(errno));
- removeSigHandlers(my);
+ Worker_fini(my);
retVal = NULL;
} else {
- my->pidP = Worker_addStatistic(my, "pid");
- *my->pidP = my->pid;
+ unsigned long *pidP;
+
+ pidP = Worker_addStatistic(my, "pid");
+ *pidP = my->pid;
if (0 > changePriority(priority)) {
syslog(LOG_WARNING, "changeing priority: %s", strerror(errno));
void Worker_fini(Worker *my)
{
-
- if (!my->isStandalone) {
- sigset_t sigMaskS, *sigMask = &sigMaskS;
-
- removeSigHandlers(my);
- installSigHandlers(my, SIGINT, SIGTERM, noopHandler);
-
- *my->pidP |= (1 << 31);
-
- /* BUGBUG there should be a timeout here */
- sigemptyset(sigMask);
- sigsuspend(sigMask);
- }
-
-
removeStatShm(my);
removeSigHandlers(my);
return retVal;
}
-void Worker_halt(const char *name, int timeout)
-{
- Worker myS, *my = &myS;
-
- strcpy(my->name, name);
-
- if (0 == openStatShm(my)) {
- my->pid = my->statistics[0].value;
- if (my->pid > 0) {
- if (0 == kill(my->pid, SIGUSR1)) {
- while (((my->pid = my->statistics[0].value) & (1 << 31)) == 0) {
- sleep(1);
- }
- }
- }
- closeStatShm(my);
- }
-}
-
void Worker_stop(const char *name, int timeout)
{
Worker myS, *my = &myS;
strcpy(my->name, name);
if (0 == openStatShm(my)) {
- my->pid = my->statistics[0].value & ~(1 << 31);
+ my->pid = my->statistics[0].value;
if (my->pid > 0) {
if (0 == kill(my->pid, SIGTERM)) {
sleep(1);
wait(NULL);
}
}
- closeStatShm(my);
}
}