[Patch 3/4] chunkd: make error paths more regular

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



1. Don't try to save a call in a function where normal and error unfolding
   sequences are different.
2. Use exception labels linked to what caused them, not to what cleanup
   has to be done.
3. Balance fs_open <-> fs_close.

Signed-off-by: Pete Zaitcev <zaitcev@xxxxxxxxxx>

---
 server/be-fs.c  |   18 ++++++++----------
 server/chunkd.h |    1 -
 server/server.c |   14 ++++++--------
 3 files changed, 14 insertions(+), 19 deletions(-)

Jeff, I generally do not interfere into the style, such as the offset
for continuation arguments etc. In this case I had to puzzle out if
error paths were correct and figured it's cheaper to clean them.
For fs_free case, I had to think again what you meant by such an
unusual arrangement. Apparently it's just a random artefact.

commit d10b113308ac5bda13d524ebb3f42f610a9ff8c8
Author: Master <zaitcev@xxxxxxxxxxxxxxxxxx>
Date:   Fri Dec 25 22:25:41 2009 -0700

    Cleanup.

diff --git a/server/be-fs.c b/server/be-fs.c
index 89635f8..6551c83 100644
--- a/server/be-fs.c
+++ b/server/be-fs.c
@@ -75,7 +75,7 @@ int fs_open(void)
 	}
 
 	if (!tchdbsetmutex(hdb))
-		goto out_hdb;
+		goto out_mut;
 
 	omode = HDBOREADER | HDBONOLCK | HDBOWRITER | HDBOCREAT | HDBOTSYNC;
 	if (!tchdbopen(hdb, db_fn, omode)) {
@@ -86,24 +86,22 @@ int fs_open(void)
 
 	chunkd_srv.tbl_master = hdb;
 
-out:
 	free(db_fn);
-	return rc;
+	return 0;
 
+out_mut:
 out_hdb:
 	tchdbdel(hdb);
-	goto out;
+out:
+	free(db_fn);
+	return rc;
 }
 
 void fs_close(void)
 {
 	tchdbclose(chunkd_srv.tbl_master);
-}
-
-void fs_free(void)
-{
-	if (chunkd_srv.tbl_master)
-		tchdbdel(chunkd_srv.tbl_master);
+	tchdbdel(chunkd_srv.tbl_master);
+	chunkd_srv.tbl_master = NULL;
 }
 
 bool fs_table_open(const char *user, const void *kbuf, size_t klen,
diff --git a/server/chunkd.h b/server/chunkd.h
index a18a6d4..d0b0ea6 100644
--- a/server/chunkd.h
+++ b/server/chunkd.h
@@ -220,7 +220,6 @@ extern struct hail_log cldu_hail_log;
 /* be-fs.c */
 extern int fs_open(void);
 extern void fs_close(void);
-extern void fs_free(void);
 extern struct backend_obj *fs_obj_new(uint32_t table_id, const void *kbuf, size_t klen,
 				      enum chunk_errcode *err_code);
 extern struct backend_obj *fs_obj_open(uint32_t table_id, const char *user,
diff --git a/server/server.c b/server/server.c
index 381772b..1b48905 100644
--- a/server/server.c
+++ b/server/server.c
@@ -1664,13 +1664,13 @@ int main (int argc, char *argv[])
 
 	if (fs_open()) {
 		rc = 1;
-		goto err_out_session;
+		goto err_out_fs;
 	}
 
 	if (cld_begin(chunkd_srv.ourhost, chunkd_srv.cell, chunkd_srv.nid,
 		      &chunkd_srv.loc, NULL)) {
 		rc = 1;
-		goto err_out_fs;
+		goto err_out_cld;
 	}
 
 	/* set up server networking */
@@ -1686,19 +1686,17 @@ int main (int argc, char *argv[])
 
 	applog(LOG_INFO, "shutting down");
 
+	/* net_close(); */
 err_out_listen:
 	cld_end();
-err_out_fs:
+err_out_cld:
 	fs_close();
+err_out_fs:
+	g_hash_table_destroy(chunkd_srv.fd_info);
 err_out_session:
-	/* net_close(); */
 	unlink(chunkd_srv.pid_file);
 	close(chunkd_srv.pid_fd);
 err_out:
-	if (strict_free) {
-		fs_free();
-		g_hash_table_destroy(chunkd_srv.fd_info);
-	}
 	closelog();
 	return rc;
 }
--
To unsubscribe from this list: send the line "unsubscribe hail-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Fedora Clound]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux