diff options
| author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-06-17 16:23:29 +0200 | 
|---|---|---|
| committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-06-17 16:23:29 +0200 | 
| commit | 7a12dc9d5841bb880f4bb79dbbd5e09dcb79ef98 (patch) | |
| tree | 5aeee1a6f05aa4a35ceab97ba6a7da16979555a5 /src/irmd | |
| parent | a2fb329778938f769121855c8a11aa3bfb30b194 (diff) | |
| parent | dba896b9a0ca7cbe4fb379017672bd44a0a77ef0 (diff) | |
| download | ouroboros-7a12dc9d5841bb880f4bb79dbbd5e09dcb79ef98.tar.gz ouroboros-7a12dc9d5841bb880f4bb79dbbd5e09dcb79ef98.zip | |
Merged in dstaesse/ouroboros/be-irmd-startup (pull request #129)
irmd, lib: use shm_du_map as lockfile.
Diffstat (limited to 'src/irmd')
| -rw-r--r-- | src/irmd/main.c | 30 | 
1 files changed, 19 insertions, 11 deletions
| diff --git a/src/irmd/main.c b/src/irmd/main.c index c20d63db..87625205 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -1555,11 +1555,20 @@ static struct irm * irm_create()                  return NULL;          if (access("/dev/shm/" SHM_DU_MAP_FILENAME, F_OK) != -1) { -                LOG_ERR("IRM daemon is running in this system."); -                LOG_ERR("If you think this message is in error,"); -                LOG_ERR("please remove /dev/shm/" SHM_DU_MAP_FILENAME); -                LOG_ERR("(root privileges required) or reboot your system."); -                return NULL; +                struct shm_du_map * dum = shm_du_map_open(); +                if (dum == NULL) { +                        LOG_ERR("Could not examine existing shm file."); +                        exit(EXIT_FAILURE); +                } +                if (kill(shm_du_map_owner(dum), 0) < 0) { +                        LOG_INFO("IRMd didn't properly shut down last time."); +                        shm_du_map_destroy(dum); +                        LOG_INFO("Stale shm file removed."); +                } else { +                        LOG_WARN("IRMd already running, exiting."); +                        free(i); +                        exit(EXIT_SUCCESS); +                }          }          i->threadpool = malloc(sizeof(pthread_t) * IRMD_THREADPOOL_SIZE); @@ -1621,19 +1630,18 @@ int main()          sig_act.sa_flags     = SA_SIGINFO;          if (sigaction(SIGINT,  &sig_act, NULL) < 0) -                exit(1); +                exit(EXIT_FAILURE);          if (sigaction(SIGTERM, &sig_act, NULL) < 0) -                exit(1); +                exit(EXIT_FAILURE);          if (sigaction(SIGHUP,  &sig_act, NULL) < 0) -                exit(1); +                exit(EXIT_FAILURE);          if (sigaction(SIGPIPE, &sig_act, NULL) < 0) -                exit(1); +                exit(EXIT_FAILURE);          instance = irm_create();          if (instance == NULL)                  return 1; -          pthread_create(&instance->cleanup_flows, NULL, irm_flow_cleaner, NULL);          for (t = 0; t < IRMD_THREADPOOL_SIZE; ++t) @@ -1647,5 +1655,5 @@ int main()          irm_destroy(instance); -        return 0; +        exit(EXIT_SUCCESS);  } | 
