netdev-dpdk: fix mbuf leaks
[cascardo/ovs.git] / ovsdb / mutation.c
index 9f09d59..6a43e34 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009, 2010 Nicira Networks
+/* Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ ovsdb_mutator_to_string(enum ovsdb_mutator mutator)
     return NULL;
 }
 
-static WARN_UNUSED_RESULT struct ovsdb_error *
+static OVS_WARN_UNUSED_RESULT struct ovsdb_error *
 type_mismatch(const struct ovsdb_mutation *m, const struct json *json)
 {
     struct ovsdb_error *error;
@@ -69,7 +69,7 @@ type_mismatch(const struct ovsdb_mutation *m, const struct json *json)
     return error;
 }
 
-static WARN_UNUSED_RESULT struct ovsdb_error *
+static OVS_WARN_UNUSED_RESULT struct ovsdb_error *
 ovsdb_mutation_from_json(const struct ovsdb_table_schema *ts,
                          const struct json *json,
                          struct ovsdb_symbol_table *symtab,
@@ -95,6 +95,12 @@ ovsdb_mutation_from_json(const struct ovsdb_table_schema *ts,
                                   "No column %s in table %s.",
                                   column_name, ts->name);
     }
+    if (!m->column->mutable) {
+        return ovsdb_syntax_error(json, "constraint violation",
+                                  "Cannot mutate immutable column %s in "
+                                  "table %s.", column_name, ts->name);
+    }
+
     ovsdb_type_clone(&m->type, &m->column->type);
 
     mutator_name = json_string(array->elems[1]);
@@ -144,7 +150,7 @@ ovsdb_mutation_from_json(const struct ovsdb_table_schema *ts,
         break;
 
     default:
-        NOT_REACHED();
+        OVS_NOT_REACHED();
     }
 
 exit:
@@ -300,7 +306,7 @@ mutate_scalar(const struct ovsdb_type *dst_type, struct ovsdb_datum *dst,
             }
         }
     } else {
-        NOT_REACHED();
+        OVS_NOT_REACHED();
     }
 
     for (i = 0; i < dst->n; i++) {
@@ -327,7 +333,7 @@ ovsdb_mutation_check_count(struct ovsdb_datum *dst,
     if (!ovsdb_datum_conforms_to_type(dst, dst_type)) {
         char *s = ovsdb_type_to_english(dst_type);
         struct ovsdb_error *e = ovsdb_error(
-            "constaint violation",
+            "constraint violation",
             "Attempted to store %u elements in %s.", dst->n, s);
         free(s);
         return e;
@@ -381,7 +387,7 @@ ovsdb_mutation_set_execute(struct ovsdb_row *row,
             break;
 
         default:
-            NOT_REACHED();
+            OVS_NOT_REACHED();
         }
         if (error) {
             return error;