gpt4 book ai didi

c - gdbus:在信号发射后立即释放信号参数是否安全

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:37 25 4
gpt4 key购买 nike

我创建了简单的 dbus 服务,它使用动态分配的数据参数发出信号:

file_name = g_strdup("myfile");
...
...
g_signal_emit_by_name (object, "mysignal", file_name);
g_free(file_name);

在这种情况下,信号监听器可能会收到已经被销毁的 file_name 字符串。

那么在 g_signal_emit_by_name 调用之后立即释放 file_name 是否安全,或者我应该等待几秒钟?或者在这种情况下是否有任何其他机制来释放内存?

最佳答案

GSignal 发射是同步的,即所有连接到信号的回调都由 g_signal_emit() 依次运行,一旦所有回调返回,它将把控制权返回给您。因此,在 g_signal_emit() 返回后发出信号并释放信号参数是安全的。

如果您正在使用 DBus,那么它仍然是安全的:数据将被复制到接收进程,因为不可能跨进程边界共享它。

关于c - gdbus:在信号发射后立即释放信号参数是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21519154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com