# dbus-deviation: Error codes

A list of all the possible error codes produced by dbus-deviation, along with potential causes, what problems result, and how to avoid them.

## Interface parser errors

Error code | Compatibility | Description
--- | --- | ---
argument-type | error | The type of an argument to a method or signal was not a valid D-Bus type. Check the D-Bus type system.
duplicate-interface | error | Two D-Bus interfaces with the same name were defined in a single API file. One of the interfaces may be misnamed.
duplicate-method | error | Two methods with the same name were defined in a single D-Bus interface. One of the methods may be misnamed.
duplicate-node | error | Two nodes with the same name were defined in a single D-Bus interface. One of the nodes may be misnamed.
duplicate-property | error | Two properties with the same name were defined in a single D-Bus interface. One of the properties may be misnamed.
duplicate-signal | error | Two signals with the same name were defined in a single D-Bus interface. One of the signals may be misnamed.
interface-name | error | The name of a D-Bus interface was not valid. Check the D-Bus interface name documentation.
method-name | error | The name of a D-Bus method was not valid. Check the D-Bus member name documentation.
missing-attribute | error | An XML node in the API file was missing a required attribute. Typically, a ‘name’ attribute is required — check the Introspection Data Format specification.
node-name | error | The path (name) of a D-Bus node was not a valid relative path. The root node must have an absolute object path (if one is specified); child nodes must have relative object paths (if specified). Check the D-Bus object path documentation.
property-type | error | The type of a D-Bus property was not a valid D-Bus type. Check the D-Bus type system.
signal-name | error | The name of a D-Bus signal was not valid. Check the D-Bus member name documentation.
unknown-node | error | An XML node in the API file was not recognized. Check the Introspection Data Format specification.

## Type parser errors

Error code | Compatibility | Description
--- | --- | ---
invalid-type | error | A D-Bus type string is invalid, or represents an illegal D-Bus type. Check the D-Bus type system documentation.
reserved-type | error | A D-Bus type string contains a reserved type character, such as `m`, `*`, `?`, `@`, `&` or `^`. These are not allowed in interface definitions; they’re reserved for binding implementations or future features. Check the D-Bus type system documentation.
unknown-type | error | A D-Bus type string contains an unknown character which is not part of the language of D-Bus type strings. Check the D-Bus type system documentation.

## Comparator errors

Error code | Compatibility | Description
--- | --- | ---
argument-added | backwards-incompatible | A new argument was added to a method or signal. This is backwards incompatible as all existing call sites and signal handlers need to be changed to handle it.
argument-direction-changed-*-* | backwards-incompatible | An argument’s direction was changed from ‘in’ to ‘out’ or vice-versa. This is backwards incompatible as all existing call sites and signal handlers need to be changed to write the argument when they would have previously read it, or vice-versa.
argument-name-changed | info | An argument changed name. This is not an API break, as arguments are looked up by index. Note that it is an API break if two arguments have swapped places though. You should check that the name change is not accompanied by a change in the semantics of the argument.
argument-removed | backwards-incompatible | An argument was removed from a method or signal. This is backwards incompatible as all existing call sites and signal handlers need to be changed to stop using it.
argument-type-changed | backwards-incompatible | An argument changed type. This is backwards incompatible as all existing call sites and signal handlers need to be changed to use the new type. This might have been caused by another argument being added or removed; so check other error messages too.
c-symbol-changed | info | The C symbol corresponding to a D-Bus API changed name. This does not affect stability of the D-Bus API, but may change the API of any generated C bindings. You should check whether that is the case.
deprecated | info | A D-Bus API has been marked as deprecated using the `org.freedesktop.DBus.Deprecated` annotation. The API can still be used, but you might want to port applications away from using it, to use the documented replacement instead.
ecs-changed-true-false, ecs-changed-true-const, ecs-changed-invalidates-false, ecs-changed-invalidates-const | forwards-incompatible | A D-Bus property which previously emitted the `org.freedesktop.DBus.Properties.PropertiesChanged` signal when its value changed will no longer emit that signal. It either now has a constant value (for the lifetime of the D-Bus object containing the property), or simply is no longer guaranteed to emit the signal when its value changes. Applications which previously handled notifications for this property will no longer receive them, but will otherwise continue to function.
ecs-changed-false-true, ecs-changed-false-invalidates, ecs-changed-const-true, ecs-changed-const-invalidates | backwards-incompatible | A D-Bus property which previously did not emit the `org.freedesktop.DBus.Properties.PropertiesChanged` signal will now emit that signal when its value changes. The signal may contain the updated value of the property, or may simply mark the property as ‘invalidated’. Applications which previously assumed the property had a constant value should be changed to handle notifications for it.
ecs-changed-true-invalidates | backwards-incompatible | A D-Bus property which previously emitted its updated value in the `org.freedesktop.DBus.Properties.PropertiesChanged` signal when its value changed will no longer include the updated value, and will instead notify the property as ‘invalidated’. Applications which expected the property to be listed in the `changed_properties` argument of the `org.freedesktop.DBus.Properties.PropertiesChanged` signal should be changed to look in the `invalidated_properties` argument — or to look in both, for maximum compatibility.
ecs-changed-invalidates-true | backwards-incompatible | A D-Bus property which previously did not emit its updated value in the `org.freedesktop.DBus.Properties.PropertiesChanged` signal when its value changed will now include the updated value, and will no longer notify the property as ‘invalidated’. Applications which expected the property to be listed in the `invalidated_properties` argument of the `org.freedesktop.DBus.Properties.PropertiesChanged` signal should be changed to look in the `changed_properties` argument — or to look in both, for maximum compatibility.
ecs-changed-const-false | backwards-incompatible | A D-Bus property which was previously marked as constant, with a value which did not change throughout the lifetime of the containing D-Bus object, is now marked as non-constant. Its value may now change; however, such changes will not be notified using the `org.freedesktop.DBus.Properties.PropertiesChanged` signal. Applications should be changed to re-query the property when appropriate, and to no longer assume that its value is constant.
ecs-changed-false-const | forwards-incompatible | A D-Bus property which was previously marked as non-constant, is now marked as constant, with a value which cannot change throughout the lifetime of the containing D-Bus object. The property will continue to not be notified through the `org.freedesktop.DBus.Properties.PropertiesChanged` signal. Applications may be changed to assume the property’s value is constant, and hence no longer need to re-query its value after the initial query.
interface-added | forwards-incompatible | A new D-Bus interface was added to the API, and can now be used in applications. You must bump your application’s dependency on the D-Bus API version, or check that the new interface is implemented at runtime before using it, otherwise your application will not run correctly against older versions of the D-Bus service.
interface-removed | backwards-incompatible | A D-Bus interface was removed from the API, and can no longer be used in applications. This is a backwards-incompatible change, and all applications which were using that interface must be ported away from it, or have runtime version checks added so they only use the interface when the D-Bus service implements it at runtime.
method-added | forwards-incompatible | A new method was added to a D-Bus interface in the API, and can now be used in applications. You must bump your application’s dependency on the D-Bus API version, or check that the new method is available at runtime before using it, otherwise your application will not run correctly against older versions of the D-Bus service.
method-removed | backwards-incompatible | A method was removed from a D-Bus interface in the API, and can no longer be used in applications. This is a backwards-incompatible change, and all applications which were using that method must be ported away from it, or have runtime version checks added so they only use the method when the D-Bus service implements it at runtime.
property-access-changed-read-readwrite, property-access-changed-write-readwrite | forwards-incompatible | A property changed access flags from ‘read’ or ‘write’ to ‘readwrite’, making it less restrictive. Applications may now get and set the property, which was not possible before. This is a forwards-incompatible change, so any applications which start using the lessened restrictions should gracefully handle failure to use them, so that they continue to work with older versions of the D-Bus service.
property-access-changed-read-write, property-access-changed-write-read, property-access-changed-readwrite-read, property-access-changed-readwrite-write | backwards-incompatible | A property changed access flags to be more restrictive. This is a backwards incompatible change, and applications will need to be changed to stop accessing the property how they were before, or to gracefully handle failure of set or get calls on the property.
property-added | forwards-incompatible | A new property was added to a D-Bus interface in the API, and can now be used in applications. You must bump your application’s dependency on the D-Bus API version, or check that the new property is available at runtime before using it, otherwise your application will not run correctly against older versions of the D-Bus service.
property-removed | backwards-incompatible | A property was removed from a D-Bus interface in the API, and can no longer be used in applications. This is a backwards-incompatible change, and all applications which were using that property must be ported away from it, or have runtime version checks added so they only use the property when the D-Bus service implements it at runtime.
property-type-changed | backwards-incompatible | A property changed type. This is backwards incompatible as all existing set and get sites need to be changed to use the new type.
reply-added | backwards-incompatible | A D-Bus method which was previously marked as not returning a reply will now return a reply. All call sites using the method should be modified to asynchronously wait for a reply and handle any errors or return values it provides. This may be coupled with a change in the method’s type to add new ‘out’ arguments (`argument-added`), which should be handled as appropriate.
reply-removed | backwards-incompatible | A D-Bus method which was previously marked as returning a reply will now not return a reply. All call sites using the method should be modified to not wait for a reply, and any code which handles errors or return values can be removed. This may be coupled with a change in the method’s type to remove ‘out’ arguments (`argument-removed`), support for which should be removed as appropriate.
signal-added | forwards-incompatible | A new signal was added to a D-Bus interface in the API, and can now be connected to in applications. You must bump your application’s dependency on the D-Bus API version, or check that the new signal is available at runtime before connecting to it, otherwise your application will not run correctly against older versions of the D-Bus service.
signal-removed | backwards-incompatible | A signal was removed from a D-Bus interface in the API, and can no longer be used in applications. This is a backwards-incompatible change, and all applications which were connecting to that signal must be ported away from it, or have runtime version checks added so they only connect to the signal when the D-Bus service implements it at runtime.
undeprecated | info | A D-Bus API which was previously marked as deprecated using the `org.freedesktop.DBus.Deprecated` annotation is no longer marked as deprecated. You may start using it in applications again, although you should check whether the un-deprecation was intentional first.

## Bugs and problems

If you have found a bug on this page, have found missing documentation, or if some of the documentation is unclear, please file a bug.