Aren't your leaking reply there? You don't seem to be unreffing it and it's not being returned to someone else to do it either.
On Sat, Jan 22, 2022, 3:12 AM www <[email protected]> wrote: > +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 > > > > > >
