summaryrefslogtreecommitdiffstats
path: root/glusterfsd
diff options
context:
space:
mode:
Diffstat (limited to 'glusterfsd')
-rw-r--r--glusterfsd/src/glusterfsd.c41
1 files changed, 29 insertions, 12 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c
index bbaca1e7277..c980e7bc640 100644
--- a/glusterfsd/src/glusterfsd.c
+++ b/glusterfsd/src/glusterfsd.c
@@ -1199,6 +1199,26 @@ parse_opts (int key, char *arg, struct argp_state *state)
return 0;
}
+gf_boolean_t
+should_call_fini (glusterfs_ctx_t *ctx, xlator_t *trav)
+{
+ /* There's nothing to call, so the other checks don't matter. */
+ if (!trav->fini) {
+ return _gf_false;
+ }
+
+ /* This preserves previous behavior in glusterd. */
+ if (ctx->process_mode == GF_GLUSTERD_PROCESS) {
+ return _gf_true;
+ }
+
+ /* This is the only one known to be safe in glusterfsd. */
+ if (!strcmp(trav->type,"experimental/fdl")) {
+ return _gf_true;
+ }
+
+ return _gf_false;
+}
void
cleanup_and_exit (int signum)
@@ -1271,20 +1291,17 @@ cleanup_and_exit (int signum)
/*call fini for glusterd xlator */
/* TODO : Invoke fini for rest of the xlators */
- if (ctx->process_mode == GF_GLUSTERD_PROCESS) {
-
- trav = NULL;
- if (ctx->active)
- trav = ctx->active->top;
- while (trav) {
- if (trav->fini) {
- THIS = trav;
- trav->fini (trav);
- }
- trav = trav->next;
+ trav = NULL;
+ if (ctx->active)
+ trav = ctx->active->top;
+ while (trav) {
+ if (should_call_fini(ctx,trav)) {
+ THIS = trav;
+ trav->fini (trav);
}
-
+ trav = trav->next;
}
+
exit(0);
}