static int com_run(void)
{
- int ret;
+ int ret, fd = -1;
+ char *config_file;
+ pid_t pid;
if (OPT_GIVEN(DSS, DRY_RUN)) {
DSS_ERROR_LOG(("dry run not supported by this command\n"));
return -E_SYNTAX;
}
+ config_file = get_config_file_name();
+ ret = get_dss_pid(config_file, &pid);
+ free(config_file);
+ if (ret >= 0) {
+ DSS_ERROR_LOG(("pid %d\n", (int)pid));
+ return -E_ALREADY_RUNNING;
+ }
if (OPT_GIVEN(RUN, DAEMON)) {
- daemon_init();
+ fd = daemon_init();
daemonized = true;
logfile = open_log(OPT_STRING_VAL(RUN, LOGFILE));
}
ret = install_sighandler(SIGHUP);
if (ret < 0)
return ret;
+ if (fd >= 0) {
+ ret = write(fd, "\0", 1);
+ if (ret != 1) {
+ DSS_ERROR_LOG(("write to daemon pipe returned %d\n",
+ ret));
+ if (ret < 0)
+ return -ERRNO_TO_DSS_ERROR(errno);
+ return -E_BUG;
+ }
+ }
ret = select_loop();
if (ret >= 0) /* impossible */
ret = -E_BUG;