commit | 560e5fd5d135c7a3d4e354fd5346220fb9483575 | [log] [tgz] |
---|---|---|
author | Patrick Williams <patrick@stwcx.xyz> | Thu Jan 12 10:00:17 2017 -0600 |
committer | Patrick Williams <patrick@stwcx.xyz> | Fri Jan 13 08:14:57 2017 -0600 |
tree | a69051c51a016fbe9bd24d2ad07b1af14fb5df29 | |
parent | aa2e7f7170327511110a448c1314a1ef2195ee25 [diff] |
message: Change conversion ctor to inc ref-count There are cases of calling the message constructor where the ownership of the raw pointer is transfered and others where it is duplicated. The ownership-transfer use-cases are likely all embedded within sdbusplus itself and the ownership-duplicate cases tend to be done by external users. This causes the current API to be bug-prone as it requires something like: sdbusplus::message::message(sd_bus_message_ref(m)); Change the conversion constructor to not require the external _ref call and instead add a new constructor that bypasses the ref. Thus, the calling conventions now look like this: Ownership-duplicate: sdbusplus::message::message(m); // calls _ref. Ownership-transfer: sdbusplus::message::message(m, std::false_type()); // no _ref. Resolves openbmc/openbmc#950. Change-Id: Ia1ae527c4d1235b1625368cfffeb4ed495457768 Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
sdbusplus is a library and a tool for generating C++ bindings to dbus.
The path of your file will be the interface name. For example, for an interface xyz.openbmc_project.control.Chassis
, you would create the following file: xyz/openbmc_project/control/Chassis.interface.yaml
. Similary, for errors, you would create xyz/openbmc_project/control/Chassis.errors.yaml
.
Generating all the files:
root_dir=$(readlink -f ../phosphor-dbus-interfaces) desired_interface=xyz.openbmc_project.control.Chassis file_prefix=chassis_interface file_exp_prefix=chassis_interface_exceptions outdir=../phosphor-chassis-control/generated # Server bindings python tools/sdbus++ --templatedir=tools/sdbusplus/templates --rootdir=$root_dir interface server-header $desired_interface > $outdir/$file_prefix.hpp python tools/sdbus++ --templatedir=tools/sdbusplus/templates --rootdir=$root_dir interface server-cpp $desired_interface > $outdir/$file_prefix.cpp # Exception bindings python tools/sdbus++ --templatedir=tools/sdbusplus/templates --rootdir=$root_dir error exception-header $desired_interface > $outdir/$file_exp_prefix.hpp python tools/sdbus++ --templatedir=tools/sdbusplus/templates --rootdir=$root_dir error exception-cpp $desired_interface > $outdir/$file_exp_prefix.cpp # Docs python tools/sdbus++ --templatedir=tools/sdbusplus/templates --rootdir=$root_dir interface markdown $desired_interface > $outdir/$file_prefix.md python tools/sdbus++ --templatedir=tools/sdbusplus/templates --rootdir=$root_dir error markdown $desired_interface > $outdir/$file_exp_prefix.md