void Slave_main(Options * o)
{
+ //fprintf(stderr, "%d\n", o->nCPU);
+
setbuf(stdin, NULL); setbuf(stdout, NULL); setbuf(stderr, NULL);
dup2(fileno(stdout), fileno(stderr)); // yes, this works, apparently
- slave = (Slave*)(calloc(o->nCPU, sizeof(slave)));
+ slave = (Slave*)(calloc(o->nCPU, sizeof(Slave)));
atexit(Slave_cleanup);
fgets(name, sizeof(name), stdin);
name[strlen(name)-1] = '\0';
- //log_print(2, "Slave_main", "Got name %s", name);
+ //log_print(LOGINFO, "Slave_main", "Started remote swarm \"%s\"", name);
+
fprintf(stdout, "%d\n", o->nCPU);
//log_print(2, "Slave_main", "Wrote nCPU %d", o->nCPU);
if (i >= o->nCPU)
error("Slave_loop", "No child matches pid %d", p);
-
-
- fprintf(stderr,"Unexpected exit of slave %s:%d", name, i);
- if (WIFSIGNALED(s))
- {
- int sig = WTERMSIG(s);
- fprintf(stderr," due to %s", strsignal(sig));
- if (sig == SIGKILL)
- {
- fprintf(stderr," - %s committing suicide\n", name);
- kill(getpid(), sig);
- }
- }
- else
- {
- fprintf(stderr," return code %d.", s);
- }
+ sigchld_respond(s, name, i);
// cancel any tasks at the master for this slave
- static int len = -1;
- if (len < 0)
- len = strlen(o->end);
- write(slave[i].out, o->end, len);
+
+ write(slave[i].out, SHELL_OUTPUT_FINISHED, SHELL_OUTPUT_FINISHED_LENGTH);
Slave_shell(i, o->shell);