summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2017-02-27 22:37:00 -0800
committerJeff Darcy <jeff@pl.atyp.us>2017-04-07 13:17:12 -0400
commitef36ac0d1b72ab2c07ed6e0a3116b7265c3c0164 (patch)
tree5932e44145f713f1c986f484edc4e4388b726b72 /xlators/mgmt/glusterd/src
parent40e571339b3c19ab2a5b6a93bc46eadf2252d006 (diff)
xlator: do not call dlclose() when debugging
Valgrind can not show the symbols if a .so after calling dlclose(). The unhelpful ??? in the output gets resolved properly with this change: ==25170== 344 bytes in 1 blocks are definitely lost in loss record 233 of 324 ==25170== at 0x4C29975: calloc (vg_replace_malloc.c:711) ==25170== by 0x52C7C0B: __gf_calloc (mem-pool.c:117) ==25170== by 0x12B0638A: ??? ==25170== by 0x528FCE6: __xlator_init (xlator.c:472) ==25170== by 0x528FE16: xlator_init (xlator.c:498) ==25170== by 0x52DA8D6: glusterfs_graph_init (graph.c:321) ==25170== by 0x52DB587: glusterfs_graph_activate (graph.c:695) ==25170== by 0x5046407: glfs_process_volfp (glfs-mgmt.c:79) ==25170== by 0x5043B9E: glfs_volumes_init (glfs.c:281) ==25170== by 0x5044FEC: glfs_init_common (glfs.c:986) ==25170== by 0x50451A7: glfs_init@@GFAPI_3.4.0 (glfs.c:1031) By not calling dlclose(), the dynamically loaded .so is still available upon program exit, and Valgrind is able to resolve the symbols. This will add an additional leak, so dlclose() is called for normal builds, but skipped when configuring with "./configure --enable-valgrind" or passing the "run-with-valgrind" xlator option. URL: http://valgrind.org/docs/manual/faq.html#faq.unhelpful Change-Id: I2044e21b1b8fcce32ad1a817fdd795218f967731 BUG: 1425623 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: https://review.gluster.org/16809 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Samikshan Bairagya <samikshan@gmail.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-rebalance.c13
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-snapd-svc.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-tierd-svc.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.c7
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.h1
7 files changed, 18 insertions, 11 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
index 9ff2541c63c..60d39cbd774 100644
--- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c
+++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
@@ -183,6 +183,7 @@ glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr,
size_t len, int cmd, defrag_cbk_fn_t cbk,
glusterd_op_t op)
{
+ xlator_t *this = NULL;
int ret = -1;
glusterd_defrag_info_t *defrag = NULL;
runner_t runner = {0,};
@@ -195,7 +196,11 @@ glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr,
char valgrind_logfile[PATH_MAX] = {0,};
char *volfileserver = NULL;
- priv = THIS->private;
+ this = THIS;
+ GF_VALIDATE_OR_GOTO ("glusterd", this, out);
+
+ priv = this->private;
+ GF_VALIDATE_OR_GOTO ("glusterd", priv, out);
GF_ASSERT (volinfo);
GF_ASSERT (op_errstr);
@@ -228,7 +233,7 @@ glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr,
GLUSTERD_GET_DEFRAG_DIR (defrag_path, volinfo, priv);
ret = mkdir_p (defrag_path, 0777, _gf_true);
if (ret) {
- gf_msg (THIS->name, GF_LOG_ERROR, errno,
+ gf_msg (this->name, GF_LOG_ERROR, errno,
GD_MSG_CREATE_DIR_FAILED, "Failed to create "
"directory %s", defrag_path);
goto out;
@@ -241,7 +246,7 @@ glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr,
(cmd == GF_DEFRAG_CMD_START_TIER ? "tier":"rebalance"));
runinit (&runner);
- if (priv->valgrind) {
+ if (this->ctx->cmd_args.valgrind) {
snprintf (valgrind_logfile, PATH_MAX,
"%s/valgrind-%s-rebalance.log",
DEFAULT_LOG_FILE_DIRECTORY,
@@ -255,7 +260,7 @@ glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr,
snprintf (volname, sizeof(volname), "rebalance/%s", volinfo->volname);
- if (dict_get_str (THIS->options, "transport.socket.bind-address",
+ if (dict_get_str (this->options, "transport.socket.bind-address",
&volfileserver) == 0) {
/*In the case of running multiple glusterds on a single machine,
*we should ensure that log file and unix socket file shouls be
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c b/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c
index b57542a85a7..59d8fbdfa6a 100644
--- a/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c
+++ b/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c
@@ -280,7 +280,7 @@ glusterd_snapdsvc_start (glusterd_svc_t *svc, int flags)
}
runinit (&runner);
- if (priv->valgrind) {
+ if (this->ctx->cmd_args.valgrind) {
snprintf (valgrind_logfile, PATH_MAX, "%s/valgrind-snapd.log",
svc->proc.logdir);
diff --git a/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c
index d6e57a432cd..4d60c856171 100644
--- a/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c
+++ b/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c
@@ -171,7 +171,7 @@ glusterd_svc_start (glusterd_svc_t *svc, int flags, dict_t *cmdline)
runinit (&runner);
- if (priv->valgrind) {
+ if (this->ctx->cmd_args.valgrind) {
snprintf (valgrind_logfile, PATH_MAX, "%s/valgrind-%s.log",
svc->proc.logfile, svc->name);
diff --git a/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c b/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c
index bfc879a3436..638d4941521 100644
--- a/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c
+++ b/xlators/mgmt/glusterd/src/glusterd-tierd-svc.c
@@ -304,7 +304,7 @@ glusterd_tierdsvc_start (glusterd_svc_t *svc, int flags)
}
runinit (&runner);
- if (priv->valgrind) {
+ if (this->ctx->cmd_args.valgrind) {
snprintf (valgrind_logfile, PATH_MAX, "%s/valgrind-tierd.log",
svc->proc.logdir);
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 89bfa3d7358..2a9407f3bb4 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -1894,7 +1894,7 @@ glusterd_volume_start_glusterfs (glusterd_volinfo_t *volinfo,
retry:
runinit (&runner);
- if (priv->valgrind) {
+ if (this->ctx->cmd_args.valgrind) {
/* Run bricks with valgrind */
if (volinfo->logdir) {
snprintf (valgrind_logfile, PATH_MAX,
diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c
index d26e959d3a3..0f6d888b968 100644
--- a/xlators/mgmt/glusterd/src/glusterd.c
+++ b/xlators/mgmt/glusterd/src/glusterd.c
@@ -1424,6 +1424,7 @@ init (xlator_t *this)
char *mountbroker_root = NULL;
int i = 0;
int total_transport = 0;
+ gf_boolean_t valgrind = _gf_false;
char *valgrind_str = NULL;
char *transport_type = NULL;
char var_run_dir[PATH_MAX] = {0,};
@@ -1781,17 +1782,19 @@ init (xlator_t *this)
}
/* Set option to run bricks on valgrind if enabled in glusterd.vol */
- conf->valgrind = _gf_false;
+ this->ctx->cmd_args.valgrind = valgrind;
ret = dict_get_str (this->options, "run-with-valgrind", &valgrind_str);
if (ret < 0) {
gf_msg_debug (this->name, 0,
"cannot get run-with-valgrind value");
}
if (valgrind_str) {
- if (gf_string2boolean (valgrind_str, &(conf->valgrind))) {
+ if (gf_string2boolean (valgrind_str, &valgrind)) {
gf_msg (this->name, GF_LOG_WARNING, EINVAL,
GD_MSG_INVALID_ENTRY,
"run-with-valgrind value not a boolean string");
+ } else {
+ this->ctx->cmd_args.valgrind = valgrind;
}
}
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index a773a2b6221..55879aa22de 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -171,7 +171,6 @@ typedef struct {
* transaction ids */
struct cds_list_head mount_specs;
- gf_boolean_t valgrind;
pthread_t brick_thread;
void *hooks_priv;