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>
4 files changed
tree: a69051c51a016fbe9bd24d2ad07b1af14fb5df29
  1. mapbox/
  2. sdbusplus/
  3. test/
  4. tools/
  5. .gitignore
  6. bootstrap.sh
  7. configure.ac
  8. LICENSE
  9. Makefile.am
  10. README.md
README.md

sdbusplus

sdbusplus is a library and a tool for generating C++ bindings to dbus.

How to use tools/sdbus++

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