diff options
Diffstat (limited to 'glusterfsd/src/glusterfsd-mgmt.c')
| -rw-r--r-- | glusterfsd/src/glusterfsd-mgmt.c | 70 | 
1 files changed, 42 insertions, 28 deletions
diff --git a/glusterfsd/src/glusterfsd-mgmt.c b/glusterfsd/src/glusterfsd-mgmt.c index 814de1d9349..dac92d67fb4 100644 --- a/glusterfsd/src/glusterfsd-mgmt.c +++ b/glusterfsd/src/glusterfsd-mgmt.c @@ -192,37 +192,9 @@ glusterfs_terminate_response_send (rpcsvc_request_t *req, int op_ret)  }  int -glusterfs_listener_stop (void) -{ -        glusterfs_ctx_t  *ctx = NULL; -        cmd_args_t       *cmd_args = NULL; -        int              ret = 0; -        xlator_t         *this = NULL; - -        ctx = glusterfs_ctx_get (); -        GF_ASSERT (ctx); -        cmd_args = &ctx->cmd_args; -        if (cmd_args->sock_file) { -                ret = unlink (cmd_args->sock_file); -                if (ret && (ENOENT == errno)) { -                        ret = 0; -                } -        } - -        if (ret) { -                this = THIS; -                gf_log (this->name, GF_LOG_ERROR, "Failed to unlink linstener " -                        "socket %s, error: %s", cmd_args->sock_file, -                        strerror (errno)); -        } -        return ret; -} - -int  glusterfs_handle_terminate (rpcsvc_request_t *req)  { -        (void) glusterfs_listener_stop ();          glusterfs_terminate_response_send (req, 0);          cleanup_and_exit (SIGTERM);          return 0; @@ -1792,6 +1764,48 @@ out:  }  int +glusterfs_listener_stop (glusterfs_ctx_t *ctx) +{ +        cmd_args_t              *cmd_args = NULL; +        rpcsvc_t                *rpc = NULL; +        rpcsvc_listener_t       *listener = NULL; +        rpcsvc_listener_t       *next = NULL; +        int                     ret = 0; +        xlator_t                *this = NULL; + +        GF_ASSERT (ctx); + +        rpc = ctx->listener; +        ctx->listener = NULL; + +        (void) rpcsvc_program_unregister(rpc, &glusterfs_mop_prog); + +        list_for_each_entry_safe (listener, next, &rpc->listeners, list) { +                rpcsvc_listener_destroy (listener); +        } + +        (void) rpcsvc_unregister_notify (rpc, glusterfs_rpcsvc_notify, THIS); + +        GF_FREE (rpc); + +        cmd_args = &ctx->cmd_args; +        if (cmd_args->sock_file) { +                ret = unlink (cmd_args->sock_file); +                if (ret && (ENOENT == errno)) { +                        ret = 0; +                } +        } + +        if (ret) { +                this = THIS; +                gf_log (this->name, GF_LOG_ERROR, "Failed to unlink linstener " +                        "socket %s, error: %s", cmd_args->sock_file, +                        strerror (errno)); +        } +        return ret; +} + +int  glusterfs_mgmt_init (glusterfs_ctx_t *ctx)  {          cmd_args_t              *cmd_args = NULL;  | 
