ovs: merge branch 'bg/ovs-leaks'
https://github.com/NetworkManager/NetworkManager/pull/296
This commit is contained in:
@@ -41,6 +41,9 @@
|
|||||||
n = json_object_iter_next(object, json_object_key_to_iter(key)))
|
n = json_object_iter_next(object, json_object_key_to_iter(key)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
NM_AUTO_DEFINE_FCN0 (json_t *, _nm_auto_decref_json, json_decref)
|
||||||
|
#define nm_auto_decref_json nm_auto(_nm_auto_decref_json)
|
||||||
|
|
||||||
#endif /* WITH_JANSON */
|
#endif /* WITH_JANSON */
|
||||||
|
|
||||||
#endif /* __NM_JANSSON_H__ */
|
#endif /* __NM_JANSSON_H__ */
|
||||||
|
@@ -348,14 +348,14 @@ _insert_interface (json_t *params, NMConnection *interface)
|
|||||||
if (s_ovs_iface)
|
if (s_ovs_iface)
|
||||||
type = nm_setting_ovs_interface_get_interface_type (s_ovs_iface);
|
type = nm_setting_ovs_interface_get_interface_type (s_ovs_iface);
|
||||||
|
|
||||||
json_array_append (options, json_string ("map"));
|
json_array_append_new (options, json_string ("map"));
|
||||||
s_ovs_patch = nm_connection_get_setting_ovs_patch (interface);
|
s_ovs_patch = nm_connection_get_setting_ovs_patch (interface);
|
||||||
if (s_ovs_patch) {
|
if (s_ovs_patch) {
|
||||||
json_array_append (options, json_pack ("[[s, s]]",
|
json_array_append_new (options, json_pack ("[[s, s]]",
|
||||||
"peer",
|
"peer",
|
||||||
nm_setting_ovs_patch_get_peer (s_ovs_patch)));
|
nm_setting_ovs_patch_get_peer (s_ovs_patch)));
|
||||||
} else {
|
} else {
|
||||||
json_array_append (options, json_array ());
|
json_array_append_new (options, json_array ());
|
||||||
}
|
}
|
||||||
|
|
||||||
json_array_append_new (params,
|
json_array_append_new (params,
|
||||||
@@ -503,12 +503,15 @@ _add_interface (NMOvsdb *self, json_t *params,
|
|||||||
OpenvswitchBridge *ovs_bridge = NULL;
|
OpenvswitchBridge *ovs_bridge = NULL;
|
||||||
OpenvswitchPort *ovs_port = NULL;
|
OpenvswitchPort *ovs_port = NULL;
|
||||||
OpenvswitchInterface *ovs_interface = NULL;
|
OpenvswitchInterface *ovs_interface = NULL;
|
||||||
|
nm_auto_decref_json json_t *bridges = NULL;
|
||||||
|
nm_auto_decref_json json_t *new_bridges = NULL;
|
||||||
|
nm_auto_decref_json json_t *ports = NULL;
|
||||||
|
nm_auto_decref_json json_t *new_ports = NULL;
|
||||||
|
nm_auto_decref_json json_t *interfaces = NULL;
|
||||||
|
nm_auto_decref_json json_t *new_interfaces = NULL;
|
||||||
|
gboolean has_interface = FALSE;
|
||||||
int pi;
|
int pi;
|
||||||
int ii;
|
int ii;
|
||||||
json_t *bridges, *new_bridges;
|
|
||||||
json_t *ports, *new_ports;
|
|
||||||
json_t *interfaces, *new_interfaces;
|
|
||||||
gboolean has_interface = FALSE;
|
|
||||||
|
|
||||||
bridges = json_array ();
|
bridges = json_array ();
|
||||||
ports = json_array ();
|
ports = json_array ();
|
||||||
@@ -584,14 +587,6 @@ _add_interface (NMOvsdb *self, json_t *params,
|
|||||||
_insert_interface (params, interface);
|
_insert_interface (params, interface);
|
||||||
json_array_append_new (new_interfaces, json_pack ("[s, s]", "named-uuid", "rowInterface"));
|
json_array_append_new (new_interfaces, json_pack ("[s, s]", "named-uuid", "rowInterface"));
|
||||||
}
|
}
|
||||||
|
|
||||||
json_decref (interfaces);
|
|
||||||
json_decref (ports);
|
|
||||||
json_decref (bridges);
|
|
||||||
|
|
||||||
json_decref (new_interfaces);
|
|
||||||
json_decref (new_ports);
|
|
||||||
json_decref (new_bridges);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -611,14 +606,13 @@ _delete_interface (NMOvsdb *self, json_t *params, const char *ifname)
|
|||||||
OpenvswitchBridge *ovs_bridge;
|
OpenvswitchBridge *ovs_bridge;
|
||||||
OpenvswitchPort *ovs_port;
|
OpenvswitchPort *ovs_port;
|
||||||
OpenvswitchInterface *ovs_interface;
|
OpenvswitchInterface *ovs_interface;
|
||||||
int pi;
|
nm_auto_decref_json json_t *bridges = NULL;
|
||||||
int ii;
|
nm_auto_decref_json json_t *new_bridges = NULL;
|
||||||
json_t *bridges, *new_bridges;
|
|
||||||
json_t *ports, *new_ports;
|
|
||||||
json_t *interfaces, *new_interfaces;
|
|
||||||
gboolean bridges_changed;
|
gboolean bridges_changed;
|
||||||
gboolean ports_changed;
|
gboolean ports_changed;
|
||||||
gboolean interfaces_changed;
|
gboolean interfaces_changed;
|
||||||
|
int pi;
|
||||||
|
int ii;
|
||||||
|
|
||||||
bridges = json_array ();
|
bridges = json_array ();
|
||||||
new_bridges = json_array ();
|
new_bridges = json_array ();
|
||||||
@@ -626,20 +620,26 @@ _delete_interface (NMOvsdb *self, json_t *params, const char *ifname)
|
|||||||
|
|
||||||
g_hash_table_iter_init (&iter, priv->bridges);
|
g_hash_table_iter_init (&iter, priv->bridges);
|
||||||
while (g_hash_table_iter_next (&iter, (gpointer) &bridge_uuid, (gpointer) &ovs_bridge)) {
|
while (g_hash_table_iter_next (&iter, (gpointer) &bridge_uuid, (gpointer) &ovs_bridge)) {
|
||||||
json_array_append_new (bridges, json_pack ("[s,s]", "uuid", bridge_uuid));
|
nm_auto_decref_json json_t *ports = NULL;
|
||||||
|
nm_auto_decref_json json_t *new_ports = NULL;
|
||||||
|
|
||||||
ports = json_array ();
|
ports = json_array ();
|
||||||
new_ports = json_array ();
|
new_ports = json_array ();
|
||||||
ports_changed = FALSE;
|
ports_changed = FALSE;
|
||||||
|
|
||||||
|
json_array_append_new (bridges, json_pack ("[s,s]", "uuid", bridge_uuid));
|
||||||
|
|
||||||
for (pi = 0; pi < ovs_bridge->ports->len; pi++) {
|
for (pi = 0; pi < ovs_bridge->ports->len; pi++) {
|
||||||
|
nm_auto_decref_json json_t *interfaces = NULL;
|
||||||
|
nm_auto_decref_json json_t *new_interfaces = NULL;
|
||||||
|
|
||||||
|
interfaces = json_array ();
|
||||||
|
new_interfaces = json_array ();
|
||||||
port_uuid = g_ptr_array_index (ovs_bridge->ports, pi);
|
port_uuid = g_ptr_array_index (ovs_bridge->ports, pi);
|
||||||
ovs_port = g_hash_table_lookup (priv->ports, port_uuid);
|
ovs_port = g_hash_table_lookup (priv->ports, port_uuid);
|
||||||
|
|
||||||
json_array_append_new (ports, json_pack ("[s,s]", "uuid", port_uuid));
|
json_array_append_new (ports, json_pack ("[s,s]", "uuid", port_uuid));
|
||||||
|
|
||||||
interfaces = json_array ();
|
|
||||||
new_interfaces = json_array ();
|
|
||||||
interfaces_changed = FALSE;
|
interfaces_changed = FALSE;
|
||||||
|
|
||||||
for (ii = 0; ii < ovs_port->interfaces->len; ii++) {
|
for (ii = 0; ii < ovs_port->interfaces->len; ii++) {
|
||||||
@@ -666,9 +666,6 @@ _delete_interface (NMOvsdb *self, json_t *params, const char *ifname)
|
|||||||
}
|
}
|
||||||
json_array_append_new (new_ports, json_pack ("[s,s]", "uuid", port_uuid));
|
json_array_append_new (new_ports, json_pack ("[s,s]", "uuid", port_uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
json_decref (interfaces);
|
|
||||||
json_decref (new_interfaces);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (json_array_size (new_ports) == 0) {
|
if (json_array_size (new_ports) == 0) {
|
||||||
@@ -680,9 +677,6 @@ _delete_interface (NMOvsdb *self, json_t *params, const char *ifname)
|
|||||||
}
|
}
|
||||||
json_array_append_new (new_bridges, json_pack ("[s,s]", "uuid", bridge_uuid));
|
json_array_append_new (new_bridges, json_pack ("[s,s]", "uuid", bridge_uuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
json_decref (ports);
|
|
||||||
json_decref (new_ports);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bridges_changed) {
|
if (bridges_changed) {
|
||||||
@@ -707,7 +701,7 @@ ovsdb_next_command (NMOvsdb *self)
|
|||||||
NMOvsdbPrivate *priv = NM_OVSDB_GET_PRIVATE (self);
|
NMOvsdbPrivate *priv = NM_OVSDB_GET_PRIVATE (self);
|
||||||
OvsdbMethodCall *call = NULL;
|
OvsdbMethodCall *call = NULL;
|
||||||
char *cmd;
|
char *cmd;
|
||||||
json_t *msg = NULL;
|
nm_auto_decref_json json_t *msg = NULL;
|
||||||
json_t *params;
|
json_t *params;
|
||||||
|
|
||||||
if (!priv->conn)
|
if (!priv->conn)
|
||||||
@@ -763,7 +757,6 @@ ovsdb_next_command (NMOvsdb *self)
|
|||||||
cmd = json_dumps (msg, 0);
|
cmd = json_dumps (msg, 0);
|
||||||
|
|
||||||
g_string_append (priv->output, cmd);
|
g_string_append (priv->output, cmd);
|
||||||
json_decref (msg);
|
|
||||||
free (cmd);
|
free (cmd);
|
||||||
|
|
||||||
ovsdb_write (self);
|
ovsdb_write (self);
|
||||||
@@ -1040,7 +1033,7 @@ static void
|
|||||||
ovsdb_got_echo (NMOvsdb *self, json_int_t id, json_t *data)
|
ovsdb_got_echo (NMOvsdb *self, json_int_t id, json_t *data)
|
||||||
{
|
{
|
||||||
NMOvsdbPrivate *priv = NM_OVSDB_GET_PRIVATE (self);
|
NMOvsdbPrivate *priv = NM_OVSDB_GET_PRIVATE (self);
|
||||||
json_t *msg;
|
nm_auto_decref_json json_t *msg = NULL;
|
||||||
char *reply;
|
char *reply;
|
||||||
gboolean output_was_empty;
|
gboolean output_was_empty;
|
||||||
|
|
||||||
@@ -1049,7 +1042,6 @@ ovsdb_got_echo (NMOvsdb *self, json_int_t id, json_t *data)
|
|||||||
msg = json_pack ("{s:I, s:O}", "id", id, "result", data);
|
msg = json_pack ("{s:I, s:O}", "id", id, "result", data);
|
||||||
reply = json_dumps (msg, 0);
|
reply = json_dumps (msg, 0);
|
||||||
g_string_append (priv->output, reply);
|
g_string_append (priv->output, reply);
|
||||||
json_decref (msg);
|
|
||||||
free (reply);
|
free (reply);
|
||||||
|
|
||||||
if (output_was_empty)
|
if (output_was_empty)
|
||||||
@@ -1299,6 +1291,9 @@ ovsdb_disconnect (NMOvsdb *self, gboolean is_disposing)
|
|||||||
gpointer user_data;
|
gpointer user_data;
|
||||||
gs_free_error GError *error = NULL;
|
gs_free_error GError *error = NULL;
|
||||||
|
|
||||||
|
if (!priv->client)
|
||||||
|
return;
|
||||||
|
|
||||||
_LOGD ("disconnecting from ovsdb");
|
_LOGD ("disconnecting from ovsdb");
|
||||||
nm_utils_error_set_cancelled (&error, is_disposing, "NMOvsdb");
|
nm_utils_error_set_cancelled (&error, is_disposing, "NMOvsdb");
|
||||||
|
|
||||||
@@ -1316,6 +1311,7 @@ ovsdb_disconnect (NMOvsdb *self, gboolean is_disposing)
|
|||||||
g_clear_object (&priv->client);
|
g_clear_object (&priv->client);
|
||||||
g_clear_object (&priv->conn);
|
g_clear_object (&priv->conn);
|
||||||
g_clear_pointer (&priv->db_uuid, g_free);
|
g_clear_pointer (&priv->db_uuid, g_free);
|
||||||
|
nm_clear_g_cancellable (&priv->cancellable);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1534,11 +1530,14 @@ dispose (GObject *object)
|
|||||||
|
|
||||||
ovsdb_disconnect (self, TRUE);
|
ovsdb_disconnect (self, TRUE);
|
||||||
|
|
||||||
|
if (priv->input) {
|
||||||
g_string_free (priv->input, TRUE);
|
g_string_free (priv->input, TRUE);
|
||||||
priv->input = NULL;
|
priv->input = NULL;
|
||||||
|
}
|
||||||
|
if (priv->output) {
|
||||||
g_string_free (priv->output, TRUE);
|
g_string_free (priv->output, TRUE);
|
||||||
priv->output = NULL;
|
priv->output = NULL;
|
||||||
|
}
|
||||||
if (priv->calls) {
|
if (priv->calls) {
|
||||||
g_array_free (priv->calls, TRUE);
|
g_array_free (priv->calls, TRUE);
|
||||||
priv->calls = NULL;
|
priv->calls = NULL;
|
||||||
@@ -1548,9 +1547,6 @@ dispose (GObject *object)
|
|||||||
g_clear_pointer (&priv->ports, g_hash_table_destroy);
|
g_clear_pointer (&priv->ports, g_hash_table_destroy);
|
||||||
g_clear_pointer (&priv->interfaces, g_hash_table_destroy);
|
g_clear_pointer (&priv->interfaces, g_hash_table_destroy);
|
||||||
|
|
||||||
g_cancellable_cancel (priv->cancellable);
|
|
||||||
g_clear_object (&priv->cancellable);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (nm_ovsdb_parent_class)->dispose (object);
|
G_OBJECT_CLASS (nm_ovsdb_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user