[ovs-dev] [PATCH 18/20] ovsdb: refactor ovsdb_monitor_create()

Andy Zhou azhou at nicira.com
Thu Mar 19 07:08:43 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