[ovs-dev] [ovsdb speedup 16/18] ovsdb: refactor ovsdb_monitor_create()
Andy Zhou
azhou at nicira.com
Thu Mar 19 07:08:39 UTC 2015
Add ovsdb_monitor_add_jsonrpc_monitor(). This change will allow
ovsdb_monitor to be reference counted.
Signed-off-by: Andy Zhou <azhou at nicira.com>
---
ovsdb/jsonrpc-server.c | 2 ++
ovsdb/ovsdb-monitor.c | 16 +++++++++++-----
ovsdb/ovsdb-monitor.h | 3 +++
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/ovsdb/jsonrpc-server.c b/ovsdb/jsonrpc-server.c
index c9d84a5..ba6df9d 100644
--- a/ovsdb/jsonrpc-server.c
+++ b/ovsdb/jsonrpc-server.c
@@ -1233,6 +1233,8 @@ ovsdb_jsonrpc_monitor_create(struct ovsdb_jsonrpc_session *s, struct ovsdb *db,
}
}
+ ovsdb_monitor_add_jsonrpc_monitor(m->dbmon, m);
+
ovsdb_monitor_get_initial(m->dbmon);
json = ovsdb_jsonrpc_monitor_compose_update(m, true);
return json ? json : json_object_create();
diff --git a/ovsdb/ovsdb-monitor.c b/ovsdb/ovsdb-monitor.c
index 3259f3c..70a8e26 100644
--- a/ovsdb/ovsdb-monitor.c
+++ b/ovsdb/ovsdb-monitor.c
@@ -231,12 +231,21 @@ ovsdb_monitor_row_destroy(const struct ovsdb_monitor_table *mt,
}
}
+void ovsdb_monitor_add_jsonrpc_monitor(struct ovsdb_monitor *dbmon,
+ struct ovsdb_jsonrpc_monitor *jsonrpc_monitor)
+{
+ struct jsonrpc_monitor_node *jm;
+
+ jm = xzalloc(sizeof *jm);
+ jm->jsonrpc_monitor = jsonrpc_monitor;
+ list_push_back(&dbmon->jsonrpc_monitors, &jm->node);
+}
+
struct ovsdb_monitor *
ovsdb_monitor_create(struct ovsdb *db,
struct ovsdb_jsonrpc_monitor *jsonrpc_monitor)
{
struct ovsdb_monitor *dbmon;
- struct jsonrpc_monitor_node *jm;
dbmon = xzalloc(sizeof *dbmon);
@@ -247,10 +256,7 @@ ovsdb_monitor_create(struct ovsdb *db,
dbmon->n_transactions = 0;
shash_init(&dbmon->tables);
- jm = xzalloc(sizeof *jm);
- jm->jsonrpc_monitor = jsonrpc_monitor;
- list_push_back(&dbmon->jsonrpc_monitors, &jm->node);
-
+ ovsdb_monitor_add_jsonrpc_monitor(dbmon, jsonrpc_monitor);
return dbmon;
}
diff --git a/ovsdb/ovsdb-monitor.h b/ovsdb/ovsdb-monitor.h
index c003184..fb7bed5 100644
--- a/ovsdb/ovsdb-monitor.h
+++ b/ovsdb/ovsdb-monitor.h
@@ -30,6 +30,9 @@ enum ovsdb_monitor_selection {
struct ovsdb_monitor *ovsdb_monitor_create(struct ovsdb *db,
struct ovsdb_jsonrpc_monitor *jsonrpc_monitor);
+void ovsdb_monitor_add_jsonrpc_monitor(struct ovsdb_monitor *dbmon,
+ struct ovsdb_jsonrpc_monitor *jsonrpc_monitor);
+
void ovsdb_monitor_remove_jsonrpc_monitor(struct ovsdb_monitor *dbmon,
struct ovsdb_jsonrpc_monitor *jsonrpc_monitor);
--
1.9.1
More information about the dev
mailing list