No. You must always wait for the close cb before you free memory.

El lun., 6 jul. 2020 20:11, Ariel Machado <amach...@grupopie.com> escribió:

> Hi folks, newbie question about memory managment with uv handles:
>
> For network handles, like uv_tcp_t, is it safe to free the memory
> immediately after calling uv_close () and not waiting for the callback?
>
> example:
>
> uv_close (handle, NULL);
> free (handle);
> vs:
> uv_close (handle, close_done_cb);
> ...
> close_done_cb (uv_handle_t * handle) {
>    free (handle);
> }
>
> According the documentation:
>
>> void uv_close(uv_handle_t
>> <http://docs.libuv.org/en/v1.x/handle.html#c.uv_handle_t>** handle*,
>> uv_close_cb <http://docs.libuv.org/en/v1.x/handle.html#c.uv_close_cb>
>> * close_cb*)
>>
>> Request handle to be closed. close_cb will be called asynchronously
>> after this call. This MUST be called on each handle before memory is
>> released. Moreover, the memory can only be released in close_cb or after
>> it has returned.
>>
>> Handles that wrap file descriptors are closed immediately but close_cb
>> will still be deferred to the next iteration of the event loop. It gives
>> you a chance to free up any resources associated with the handle.
>>
>
> but I've seen a lot of C ++ examples where uv_tcp_init() is placed in the
> class constructor and uv_close() in the class destructor, which leaves me a
> bit confused, if this RAII approach is introducing a problem, or is taking
> advantage that the socket is a file descriptor, so the closing of this kind
> of  handles are closed when invoking uv_close.
>
> I'm trying to understand how to correctly create classes and instantiate
> and destroy objects that internally manage uv_handle_t with their
> asynchronous approach.
> Thanks!
>
> Thanks.
>
> --
> You received this message because you are subscribed to the Google Groups
> "libuv" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to libuv+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/libuv/c33f0bbe-b9d2-4dce-9188-e727be30193eo%40googlegroups.com
> <https://groups.google.com/d/msgid/libuv/c33f0bbe-b9d2-4dce-9188-e727be30193eo%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to libuv+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/libuv/CALiegfnLekPNB7AMq8dZcwmkiu8-omT1Y0x67%3DEVbjQbriRwbg%40mail.gmail.com.

Reply via email to