diff options
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 81 | 
1 files changed, 11 insertions, 70 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index e3099981f06..b5e9a746ad2 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -1073,94 +1073,35 @@ glusterd_service_stop (const char *service, char *pidfile, int sig,  {          int32_t  ret = -1;          pid_t    pid = -1; -        FILE    *file = NULL; -        gf_boolean_t is_locked = _gf_false;          xlator_t *this = NULL;          this = THIS;          GF_ASSERT (this); -        file = fopen (pidfile, "r+"); - -        if (!file) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to open pidfile: %s", -                                pidfile); -                if (errno == ENOENT) { -                        gf_log (this->name, GF_LOG_TRACE, "%s may not be " -                                "running", service); -                        ret = 0; -                        goto out; -                } -                ret = -1; -                goto out; -        } -        ret = lockf (fileno (file), F_TLOCK, 0); -        if (!ret) { -                is_locked = _gf_true; -                ret = unlink (pidfile); -                if (ret && (ENOENT != errno)) { -                        gf_log (this->name, GF_LOG_ERROR, "Unable to " -                                "unlink stale pidfile: %s", pidfile); -                } else if (ret && (ENOENT == errno)){ -                        ret = 0; -                        gf_log (this->name, GF_LOG_DEBUG, "Brick already " -                                "stopped"); -                } -                goto out; -        } - - -        ret = fscanf (file, "%d", &pid); -        if (ret <= 0) { -                gf_log (this->name, GF_LOG_ERROR, "Unable to read pidfile: %s", -                                pidfile); -                ret = -1; +        if (!glusterd_is_service_running (pidfile, &pid)) { +                ret = 0; +                gf_log (this->name, GF_LOG_INFO, "%s already stopped", service);                  goto out;          } -        fclose (file); -        file = NULL; -          gf_log (this->name, GF_LOG_DEBUG, "Stopping gluster %s running in pid: "                  "%d", service, pid);          ret = kill (pid, sig); +        if (!force_kill) +                goto out; -        if (force_kill) { -                sleep (1); -                file = fopen (pidfile, "r+"); -                if (!file) { -                        ret = 0; -                        goto out; -                } -                ret = lockf (fileno (file), F_TLOCK, 0); -                if (ret && ((EAGAIN == errno) || (EACCES == errno))) { -                        ret = kill (pid, SIGKILL); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, "Unable to " -                                        "kill pid %d reason: %s", pid, -                                        strerror(errno)); -                                goto out; -                        } - -                } else if (0 == ret){ -                        is_locked = _gf_true; -                } -                ret = unlink (pidfile); -                if (ret && (ENOENT != errno)) { +        sleep (1); +        if (glusterd_is_service_running (pidfile, NULL)) { +                ret = kill (pid, SIGKILL); +                if (ret) {                          gf_log (this->name, GF_LOG_ERROR, "Unable to " -                                "unlink pidfile: %s", pidfile); +                                "kill pid %d reason: %s", pid, +                                strerror(errno));                          goto out;                  }          }          ret = 0;  out: -        if (is_locked && file) -                if (lockf (fileno (file), F_ULOCK, 0) < 0) -                        gf_log (this->name, GF_LOG_WARNING, "Cannot unlock " -                                "pidfile: %s reason: %s", pidfile, -                                strerror(errno)); -        if (file) -                fclose (file);          return ret;  }  | 
