X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fovsdb-tool.c;h=1c9e9206a154afb130e976c0fa6e10c71b7d4d60;hb=fb0d597fb64308c60001e3afc9b31eb295dedb6b;hp=26f9003bd9c1f8bef8e94dd5e9d2ee6df5a76787;hpb=1e19e50e8d3a1822bc82e81409748f173079ccff;p=openvswitch diff --git a/ovsdb/ovsdb-tool.c b/ovsdb/ovsdb-tool.c index 26f9003b..1c9e9206 100644 --- a/ovsdb/ovsdb-tool.c +++ b/ovsdb/ovsdb-tool.c @@ -187,17 +187,18 @@ compact_or_convert(const char *src_name, const char *dst_name, struct ovsdb *db; int retval; - /* Get (temporary) destination. */ + /* Lock the source, if we will be replacing it. */ if (in_place) { - dst_name = xasprintf("%s.tmp", src_name); + retval = lockfile_lock(src_name, INT_MAX, &src_lock); + if (retval) { + ovs_fatal(retval, "%s: failed to lock lockfile", src_name); + } } - /* Lock source and (temporary) destination. */ - retval = lockfile_lock(src_name, INT_MAX, &src_lock); - if (retval) { - ovs_fatal(retval, "%s: failed to lock lockfile", src_name); + /* Get (temporary) destination and lock it. */ + if (in_place) { + dst_name = xasprintf("%s.tmp", src_name); } - retval = lockfile_lock(dst_name, INT_MAX, &dst_lock); if (retval) { ovs_fatal(retval, "%s: failed to lock lockfile", dst_name); @@ -206,7 +207,7 @@ compact_or_convert(const char *src_name, const char *dst_name, /* Save a copy. */ check_ovsdb_error(new_schema ? ovsdb_file_open_as_schema(src_name, new_schema, &db) - : ovsdb_file_open(src_name, true, &db)); + : ovsdb_file_open(src_name, true, &db, NULL)); check_ovsdb_error(ovsdb_file_save_copy(dst_name, false, comment, db)); ovsdb_destroy(db); @@ -217,7 +218,6 @@ compact_or_convert(const char *src_name, const char *dst_name, dst_name, src_name); } fsync_parent_dir(dst_name); - } else { lockfile_unlock(src_lock); } @@ -248,7 +248,7 @@ transact(bool read_only, const char *db_file_name, const char *transaction) struct json *request, *result; struct ovsdb *db; - check_ovsdb_error(ovsdb_file_open(db_file_name, read_only, &db)); + check_ovsdb_error(ovsdb_file_open(db_file_name, read_only, &db, NULL)); request = parse_json(transaction); result = ovsdb_execute(db, request, 0, NULL); @@ -337,8 +337,13 @@ print_db_changes(struct shash *tables, struct shash *names) : xmemdup0(row_uuid, 8))); } } else if (columns->type == JSON_NULL) { + struct shash_node *node; + printf("\t\tdelete row\n"); - shash_delete(names, shash_find(names, row_uuid)); + node = shash_find(names, row_uuid); + if (node) { + shash_delete(names, node); + } free(old_name); }