+Add the implementation code of the method.
static int method_load_info(sd_bus_message *message, void *userdata, sd_bus_err
*error)
{
sd_bus_message *reply = NULL;
......
r = sd_bus_message_read(message. "r", &xxx);
......
r= sd_bus_message_new_return(message, &reply); //
......
r = sd_bus_message_open_container(reply, 'a', "(uuuu)");
....
r = sd_bus_message_append(reply, "(uuuu)", xx, xx ,xx ,xx);
......
r = sd_bus_message_close_container(reply);
.......
return sd_bus_send(NULL, reply, NULL);
}
Thanks,
Byron
At 2022-01-22 14:16:13, "www" <[email protected]> wrote:
Dear all,
When using sd_bus_process() + sd_bus_wait() to implement the
application(Service), call the methods function on the service can obtain the
correct information. Run a certain number of times will lead to insufficient
memory and memleak does occur.
It should not be a problem with the DBUS method, because a single call does not
increase memory, it needs to call the method 65 ~ 70 times, and you will see
the memory increase. After stopping the call, the memory will not decrease. It
seems that it has nothing to do with the time interval when the method is
called.
code implementation:
int main()
{
......
r = sd_bus_open_system(&bus);
...
r = sd_bus_add_object_vtable(bus, ......);
......
r= sd_bus_request_name(bus, "xxx.xx.xx.xxx");
......
for( ; ; )
{
r = sd_bus_process(bus, NULL);
.......
r = sd_bus_wait(bus, -1);
......
}
sd_bus_slot_unref(slot);
sd_bus_unref(bus);
}
thanks,
Byron