- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个以 DBus Introspection XML 格式描述的接口(interface):
<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node>
<interface name="com.example.foo">
<method name="Bar" />
</interface>
</node>
我这样运行 gdbus-codegen:
gdbus-codegen --interface-prefix=com.example --generate-c-code=foo-dbus --c-namespace=Dbus foo.xml
我使用这样的代码:
int main()
{
DbusFoo * skeleton = dbus_foo_skeleton_new();
g_object_unref(skeleton);
return 0;
}
但应用程序最终会泄漏 dbus_foo_default_init()
中生成的信号,如下所示:
static void
dbus_foo_default_init (DbusFooIface *iface)
{
/* GObject signals for incoming D-Bus method calls: */
/**
* DbusFoo::handle-bar:
* @object: A #DbusFoo.
* @invocation: A #GDBusMethodInvocation.
*
* Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-com-example-foo.Bar">Bar()</link> D-Bus method.
*
* If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call dbus_foo_complete_bar() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
*
* Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
*/
g_signal_new ("handle-bar",
G_TYPE_FROM_INTERFACE (iface),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (DbusFooIface, handle_bar),
g_signal_accumulator_true_handled,
NULL,
g_cclosure_marshal_generic,
G_TYPE_BOOLEAN,
1,
G_TYPE_DBUS_METHOD_INVOCATION);
}
我的问题:
使用 gdbus-codegen 生成的代码后如何清理?
最佳答案
我怀疑您会发现,如果您使用 latest GLib suppressions file 在 valgrind 下运行您的程序(在大多数 Linux 发行版的 /usr/share/glib-2.0/valgrind/
中安装了一个版本),没有泄漏。正如@ptomato 在上面的评论中所说,信号算作类型数据,而 GObject 从不释放它(除了动态注册的类型)。类型数据分配一次(首次使用时)并且永远不会释放。别担心。
关于c++ - 使用 gdbus-codegen 生成的代码时如何堵塞内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28362797/
我是 GDbus 编程新手。我需要使用 Dbus Glib 实现一个简单的 Dbus 发送-接收消息(信号)。我试图用谷歌搜索一些示例程序,但找不到。 任何人都可以发布任何此类示例程序或向我指出一些示
我正在尝试注释一个 xml 文件,以便 dbus-codegen 生成一个使用 GVariant * 而不是像 gchar 这样的 native 类型的方法。 这是我正在使用的 xml 代码。
我创建了简单的 dbus 服务,它使用动态分配的数据参数发出信号: file_name = g_strdup("myfile"); ... ... g_signal_emit_by_name (obj
我正在将代码从 dbus-glib 迁移到 GDBus,因为前者已弃用。我无法在 GDBus 中找到 dbus_connection_setup_with_g_main() 的等效函数。 https:
我能够内省(introspection) DBus 节点,并获取一些包含有关子节点信息的 XML。然而,这需要我解析 XML,并且我试图保持应用程序的轻量级。我可以使用什么 gdbus 函数来简单地获
我使用 Qt 的 QDBus 在 Linux 中编写了一个简单的 DBus 服务器。代码量很少,核心在这里: InterfaceDescription::InterfaceDescription()
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我想用 gdbus 调用方法 RegisterAgent 但我找不到合适的语法。 使用此命令在 /org/bluez 上自省(introspection) $ gdbus introspect --s
我需要包含什么库才能使用 Bluez gdbus.h 函数?我收到了很多 gdbus.h 函数的 undefined reference 错误,所以我显然缺少一个库。 *有没有办法(在终端或其他方式)
我有一个以 DBus Introspection XML 格式描述的接口(interface): 我这样运行 gdbus-codegen: gdbus-codegen --
我试图使用 gdbus 通过 dbus 发送不同的数据类型。我一直在发送以下数据类型:a{ias}。有没有人给我发送一个片段或任何方法来解决这个问题? 最佳答案 我这里有一个片段,只需替换下面代码中的
我使用 DBus 与 logind 通信以获取有关事件 session 等的信息。我使用 gdbus-codegen 创建了代码。我可以使用 call 和 get 方法获取信息,但我没有收到通知(我有
我想用 glib 注册多个媒体播放器。最小(非)工作示例是 here 。据我所知specification ,我应该导出许多具有同一个名称 /org/mpris/MediaPlayer2 的对象,这很
如何在 gdbus 自省(introspection) xml 中传递多个完整类型。例子, 当我尝试这种格式时,我得到的错误是 Error org.fr
我正在尝试将我的代码从 glib-dbus 迁移到 gdbus。在早期的实现中,类结构和实例结构都可以由我定义,并且允许指针作为属性。 struct test { GObject parent;
我如何接收多个 int32 值,即当我接收一个值时,我需要将其指定为 type=i , 但它不允许我指定为,当我这样做时我收到错误,因为期望值为空 那我试过了
我正在尝试找出使用 Linux 上的 GDBus 库获取 D-Bus 系统总线中对象的唯一 D-Bus 地址的最佳方法。 以下是我使用的库的版本号: # ls /usr/lib |grep -e db
我想使用 dbus 进行应用程序之间的通信(实际上我正在使用本地主机套接字)。我正在寻找一个非常基本(但完整/可编译)的工作示例,所以谷歌搜索我发现低级 api 不使用,因为使用绑定(bind)更好,
使用 gdbus-codegen 生成的管理器代理时,我无法接收 systemd DBus 信号。但我能够通过 DBus 成功调用 systemd 提供的方法。 我在网上搜索并查看了这些链接,但没有取
我正在使用 gdbus 和 gdbus-codegen 在 D-Bus 上创建服务。 自省(introspection)是这样的: 我正在像这样执行 gdbus-codeg
我是一名优秀的程序员,十分优秀!