[ovs-dev] [PATCH 09/19] jsonrpc-server: refactoring ovsdb_monitor_destroy()
Andy Zhou
azhou at nicira.com
Fri Apr 10 00:11:28 UTC 2015
Add ovsdb_monitor_destory() function to properly cleanup ovsdb_monitor.
It is also responsible for unhook from the replica chain.
The replica destroy callback is now called
ovsdb_monitor_destroy_callback()
Minor variable renaming in ovsdb_monitor_create() to make it
more consistent.
Signed-off-by: Andy Zhou <azhou at nicira.com>
Acked-by: Ben Pfaff <blp at nicira.com>
--
v1->v2: no change
---
ovsdb/jsonrpc-server.c | 59 ++++++++++++++++++++++++++++++++------------------
1 file changed, 38 insertions(+), 21 deletions(-)
diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
index 362cc66..96a9d34 100644
--- a/ovsdb/jsonrpc-server.c
+++ b/ovsdb/jsonrpc-server.c
@@ -43,6 +43,7 @@ VLOG_DEFINE_THIS_MODULE(ovsdb_jsonrpc_server);
struct ovsdb_jsonrpc_remote;
struct ovsdb_jsonrpc_session;
+struct ovsdb_jsonrpc_monitor;
/* Message rate-limiting. */
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
@@ -81,6 +82,7 @@ static void ovsdb_jsonrpc_trigger_complete_done(
static struct jsonrpc_msg *ovsdb_jsonrpc_monitor_create(
struct ovsdb_jsonrpc_session *, struct ovsdb *, struct json *params,
const struct json *request_id);
+static void ovsdb_jsonrpc_monitor_destroy(struct ovsdb_jsonrpc_monitor *);
static struct jsonrpc_msg *ovsdb_jsonrpc_monitor_cancel(
struct ovsdb_jsonrpc_session *,
struct json_array *params,
@@ -1092,7 +1094,7 @@ static const struct ovsdb_replica_class ovsdb_jsonrpc_replica_class;
struct ovsdb_jsonrpc_monitor *ovsdb_jsonrpc_monitor_find(
struct ovsdb_jsonrpc_session *, const struct json *monitor_id);
-static void ovsdb_monitor_destroy(struct ovsdb_replica *);
+static void ovsdb_monitor_destroy(struct ovsdb_monitor *);
static struct json *ovsdb_monitor_get_initial(
const struct ovsdb_monitor *);
@@ -1252,16 +1254,16 @@ ovsdb_monitor_create(struct ovsdb *db,
struct ovsdb_jsonrpc_monitor *jsonrpc_monitor,
const struct ovsdb_replica_class *replica_class)
{
- struct ovsdb_monitor *m;
+ struct ovsdb_monitor *dbmon;
- m = xzalloc(sizeof *m);
+ dbmon = xzalloc(sizeof *dbmon);
- ovsdb_replica_init(&m->replica, replica_class);
- ovsdb_add_replica(db, &m->replica);
- m->jsonrpc_monitor = jsonrpc_monitor;
- shash_init(&m->tables);
+ ovsdb_replica_init(&dbmon->replica, replica_class);
+ ovsdb_add_replica(db, &dbmon->replica);
+ dbmon->jsonrpc_monitor = jsonrpc_monitor;
+ shash_init(&dbmon->tables);
- return m;
+ return dbmon;
}
static void
@@ -1389,7 +1391,7 @@ ovsdb_jsonrpc_monitor_create(struct ovsdb_jsonrpc_session *s, struct ovsdb *db,
error:
if (m) {
- ovsdb_remove_replica(m->db, &m->dbmon->replica);
+ ovsdb_jsonrpc_monitor_destroy(m);
}
json = ovsdb_error_to_json(error);
@@ -1413,7 +1415,7 @@ ovsdb_jsonrpc_monitor_cancel(struct ovsdb_jsonrpc_session *s,
return jsonrpc_create_error(json_string_create("unknown monitor"),
request_id);
} else {
- ovsdb_remove_replica(m->db, &m->dbmon->replica);
+ ovsdb_jsonrpc_monitor_destroy(m);
return jsonrpc_create_reply(json_object_create(), request_id);
}
}
@@ -1425,7 +1427,7 @@ ovsdb_jsonrpc_monitor_remove_all(struct ovsdb_jsonrpc_session *s)
struct ovsdb_jsonrpc_monitor *m, *next;
HMAP_FOR_EACH_SAFE (m, next, node, &s->monitors) {
- ovsdb_remove_replica(m->db, &m->dbmon->replica);
+ ovsdb_jsonrpc_monitor_destroy(m);
}
}
@@ -1834,14 +1836,22 @@ ovsdb_monitor_get_initial(const struct ovsdb_monitor *dbmon)
}
static void
-ovsdb_monitor_destroy(struct ovsdb_replica *replica)
+ovsdb_jsonrpc_monitor_destroy(struct ovsdb_jsonrpc_monitor *m)
+{
+ json_destroy(m->monitor_id);
+ hmap_remove(&m->session->monitors, &m->node);
+ ovsdb_monitor_destroy(m->dbmon);
+ free(m);
+}
+
+static void
+ovsdb_monitor_destroy(struct ovsdb_monitor *dbmon)
{
- struct ovsdb_monitor *m = ovsdb_monitor_cast(replica);
- struct ovsdb_jsonrpc_monitor *jsonrpc_monitor = m->jsonrpc_monitor;
struct shash_node *node;
- json_destroy(jsonrpc_monitor->monitor_id);
- SHASH_FOR_EACH (node, &m->tables) {
+ list_remove(&dbmon->replica.node);
+
+ SHASH_FOR_EACH (node, &dbmon->tables) {
struct ovsdb_monitor_table *mt = node->data;
struct ovsdb_monitor_row *row, *next;
@@ -1854,13 +1864,20 @@ ovsdb_monitor_destroy(struct ovsdb_replica *replica)
free(mt->columns);
free(mt);
}
- shash_destroy(&m->tables);
- hmap_remove(&jsonrpc_monitor->session->monitors, &jsonrpc_monitor->node);
- free(jsonrpc_monitor);
- free(m);
+ shash_destroy(&dbmon->tables);
+ free(dbmon);
+}
+
+static void
+ovsdb_monitor_destroy_callback(struct ovsdb_replica *replica)
+{
+ struct ovsdb_monitor *dbmon = ovsdb_monitor_cast(replica);
+ struct ovsdb_jsonrpc_monitor *m = dbmon->jsonrpc_monitor;
+
+ ovsdb_jsonrpc_monitor_destroy(m);
}
static const struct ovsdb_replica_class ovsdb_jsonrpc_replica_class = {
ovsdb_monitor_commit,
- ovsdb_monitor_destroy
+ ovsdb_monitor_destroy_callback,
};
--
1.9.1
More information about the dev
mailing list