diff options
author | Avra Sengupta <asengupt@redhat.com> | 2014-07-14 13:07:08 +0000 |
---|---|---|
committer | Krishnan Parthasarathi <kparthas@redhat.com> | 2014-07-21 10:26:20 -0700 |
commit | f6ddb4675c096dc81420ed84fb2a6fefa9fea563 (patch) | |
tree | f30bc40d63483a62da05c98d723b3a8bcdfbb468 | |
parent | 5b8de971a4b81bc2bd6de0ffc6386587226295c6 (diff) |
gluster: Fix the recursive goto outs in the source code.
Added a script check_goto.pl, that when run from
the source code root, will scan all .c files to match
the following pattern:
label:
if (condition)
goto label;
On finding such a pattern the script will print the file name
and the line number. There are certain cases where the above
recursive pattern is intended. Hence adding those labels to
ignore-labels. Thanks Vijaikumar Mallikarjuna for the perl
script.
Also fixed all such existing errors
Change-Id: I1b821d0a8c296f16e40faff20bd029bdc880c2e9
BUG: 1119256
Signed-off-by: Vijaikumar Mallikarjuna <vmallika@redhat.com>
Signed-off-by: Avra Sengupta <asengupt@redhat.com>
Reviewed-on: http://review.gluster.org/8307
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Tested-by: Krishnan Parthasarathi <kparthas@redhat.com>
-rwxr-xr-x | extras/check_goto.pl | 45 | ||||
-rw-r--r-- | extras/test/test-ffop.c | 4 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-quota.c | 6 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-syncop.c | 3 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 23 |
5 files changed, 64 insertions, 17 deletions
diff --git a/extras/check_goto.pl b/extras/check_goto.pl new file mode 100755 index 00000000000..fa71bfc6683 --- /dev/null +++ b/extras/check_goto.pl @@ -0,0 +1,45 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +my @ignore_labels = qw (TODO retry fetch_data again try_again sp_state_read_proghdr redo disabled_loop fd_alloc_try_again); +my @ignore_files = qw (y.tab.c lex.c); +my @c_files; +my $line; +my @labels; +my $in_comments; + +{ + local $" = "|"; + my $cmd = "find . -type f -name '*.c' | grep -vE '(@ignore_files)'"; + @c_files = `$cmd`; +} + +foreach my $file (@c_files) { + chomp ($file); + open FD, $file or die ("Failed to read file $file: $!"); + @labels = (); + $in_comments = 0; + while ($line = <FD>) { + chomp ($line); + + next if $line =~ /^\s*(#|\/\/)/; + $in_comments = 1 if ($line =~ /\/\*/); + $in_comments = 0 if ($line =~ /\*\//); + + next if $in_comments; + if ($line =~ /^\s*(([a-zA-Z]|_)\w*)\s*:/) { + push (@labels, $1) unless grep (/$1/, @ignore_labels); + } + @labels = () if $line =~ /^}/; + + next unless @labels; + if ($line =~ /^\s*goto\s*(\w+)/) { + print "$file:$.: $line\n" if grep /^$1$/, @labels; + } + } + + close FD; +} + diff --git a/extras/test/test-ffop.c b/extras/test/test-ffop.c index 2d174d45276..219dd6a2da2 100644 --- a/extras/test/test-ffop.c +++ b/extras/test/test-ffop.c @@ -518,10 +518,8 @@ out: if (newfd) close (newfd); ret = unlink (filename); - if (ret < 0) { + if (ret < 0) fprintf (stderr, "unlink failed : %s\n", strerror (errno)); - goto out; - } return ret; } diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c index e4a48439812..14767f75089 100644 --- a/xlators/mgmt/glusterd/src/glusterd-quota.c +++ b/xlators/mgmt/glusterd/src/glusterd-quota.c @@ -755,16 +755,14 @@ out: if (ret) { gf_log (this->name, GF_LOG_ERROR, "Failed to " "compute cksum for quota conf file"); - goto out; + return ret; } ret = glusterd_store_save_quota_version_and_cksum (volinfo); - if (ret) { + if (ret) gf_log (this->name, GF_LOG_ERROR, "Failed to " "store quota version and cksum"); - goto out; - } } } diff --git a/xlators/mgmt/glusterd/src/glusterd-syncop.c b/xlators/mgmt/glusterd/src/glusterd-syncop.c index 67ceb20c2e7..8110579de1f 100644 --- a/xlators/mgmt/glusterd/src/glusterd-syncop.c +++ b/xlators/mgmt/glusterd/src/glusterd-syncop.c @@ -1186,7 +1186,8 @@ out: ret = glusterd_validate_and_set_gfid (op_ctx, req_dict, op_errstr); if (ret) - goto out; + gf_log (this->name, GF_LOG_ERROR, + "Failed to validate and set gfid"); } if (rsp_dict) diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 7eddb753dc6..3e90298a873 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -3923,14 +3923,19 @@ glusterd_import_quota_conf (dict_t *peer_data, int vol_idx, out: if (!ret) { ret = glusterd_compute_cksum (new_volinfo, _gf_true); - if (ret) - goto out; + if (ret) { + gf_log (this->name, GF_LOG_ERROR, + "Failed to compute checksum"); + goto clear_quota_conf; + } ret = glusterd_store_save_quota_version_and_cksum (new_volinfo); if (ret) - goto out; + gf_log (this->name, GF_LOG_ERROR, + "Failed to save quota version and checksum"); } +clear_quota_conf: if (ret && (fd > 0)) { gf_store_unlink_tmppath (new_volinfo->quota_conf_shandle); (void) gf_store_handle_destroy @@ -6724,6 +6729,7 @@ _local_gsyncd_start (dict_t *this, char *key, data_t *value, void *data) char buf[1024] = "faulty"; int uuid_len = 0; int ret = 0; + int op_ret = 0; int ret_status = 0; char uuid_str[64] = {0}; glusterd_volinfo_t *volinfo = NULL; @@ -6849,15 +6855,14 @@ out: GF_FREE (statefile); if (is_template_in_use) { - ret = glusterd_create_status_file (volinfo->volname, slave, - slave_host, slave_vol, - "Config Corrupted"); - if (ret) { + op_ret = glusterd_create_status_file (volinfo->volname, slave, + slave_host, slave_vol, + "Config Corrupted"); + if (op_ret) { gf_log ("", GF_LOG_ERROR, "Unable to create status file" ". Error : %s", strerror (errno)); - ret = -1; - goto out; + ret = op_ret; } } |