continue;
PARA_ERROR_LOG("%s init: %s\n", afs_tables[i].name,
PARA_STRERROR(-ret));
+ break;
}
if (ret >= 0)
return ret;
- do
- afs_tables[i].close();
- while (i--);
+ while (i)
+ afs_tables[--i].close();
return ret;
}
static void signal_post_select(struct sched *s, struct task *t)
{
struct signal_task *st = t->private_data;
+ t->ret = -E_AFS_PARENT_DIED;
+ if (getppid() == 1)
+ goto err;
t->ret = 1;
if (!FD_ISSET(st->fd, &s->rfds))
return;
if (st->signum == SIGHUP) {
close_afs_tables();
t->ret = open_afs_tables();
+ /* FIXME: Restore current mood or playlist */
+ if (t->ret < 0)
+ goto err;
return;
}
- PARA_NOTICE_LOG("caught signal %d\n", st->signum);
t->ret = -E_AFS_SIGNAL;
+err:
+ PARA_NOTICE_LOG("%s\n", PARA_STRERROR(-t->ret));
unregister_tasks();
}