| commit | ba6f50cde819e1b662ec1516c873d76ea572d90f | [log] [tgz] |
|---|---|---|
| author | Patrick Williams <patrick@stwcx.xyz> | Tue Apr 18 11:38:30 2017 -0500 |
| committer | Patrick Williams <patrick@stwcx.xyz> | Tue Apr 18 11:38:33 2017 -0500 |
| tree | 683ff467472aaa99dcef409cde8e07c208525e42 | |
| parent | 93b0e70870ceccb8bf439617848e99fe02ea08c8 [diff] |
bus: change constructor semantics
Previously, the bus object had no semantics to recognize if
it was the primary-holder of a sd_bus or a secondary one.
On destruction, the object always called 'sd_bus_unref' and it
was assumed that the sd-bus library would properly close the
bus on last-unref. This turns out not to be true and lead to
file-descriptor leaks.
Change the constructor to mimic what is done in 'message':
- When the constructor is called with a sd_bus*, the class becomes
a secondary-holder and calls 'sd_bus_unref' on destruction, which
is the old behavior. The class also calls 'sd_bus_ref' on
construction, so this should no longer be done by callers.
- When the constructor is called via the new_* functions (or by
adding a std::false_type parameter), the class becomes a primary-
holder and calls 'sd_bus_flush_close_unref' on destruction.
Note: Current callers that use syntax like 'bus(sd_bus_ref(b))' will
need to be updated to avoid a file-descriptor leak.
Fixes openbmc/openbmc#1432.
Change-Id: Ic0c582f8fbfd44775bcdaffa6a21518a0cd056b1
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