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
>
>
>
>
>
>

Reply via email to