Please don't PM me questions. I am not your support, and it is improper
etiquette to take discussions off list.

libuv doesn't not permit multiple handles to exist against the same fd.

`uv_poll_stop` doesn't release the libuv resources either. But it does give
you a good, safe place to call uv_close from (although uv_close also calls
uv_poll_stop, so the extra step isn't really necessary). However, according
to bug https://github.com/libuv/libuv/issues/1148, it looks like you'll
also need to wait for `uv_close` notification to complete before reusing
the fd.


On Fri, May 12, 2017 at 3:25 PM srinivasa srikanth podila <
[email protected]> wrote:

> Hi Jameson,
>
> Consider a scenario i have a socket connection and i send continuous HTTP
> GET requests for different URL's asynchronously on the same socket. I shall
> be creating multiple poll handles for each request rite. why is this
> scenario of multiple poll-handles[allocated separately] on socket not
> supported by libuv?
>
> uv_poll_stop does not give me a callback context to free the alloc'd
> memory. so i have only option of uv_close.
>
> Srikanth
>
> On Fri, 12 May 2017 at 23:38 Jameson Nash <[email protected]> wrote:
>
>> It is possible. You do have to be careful not to have multiple active at
>> the same time though (`uv_poll_stop` can help with this. I've found it can
>> be helpful to call that from the poll callback, as that can enable libuv to
>> avoid re-adding it to the event list.)
>>
>>
>> On Fri, May 12, 2017 at 1:47 PM Srinivasa Srikanth Podila <
>> [email protected]> wrote:
>>
>>> Thanks for your reply.
>>>
>>> I am using multiple poll-handles on same sockfd's. However the
>>> poll-handles are from different requests. It is like sending multiple HTTP
>>> gets on same socket.
>>> Please let me know if any problem with libuv to handle this.
>>>
>>> Could you please clarify this?
>>>
>>> Thanks,
>>> Srikanth
>>>
>>> On Friday, 12 May 2017 22:57:08 UTC+5:30, Jameson Nash wrote:
>>>>
>>>> You might want to try running under rr (record and replay) to find out
>>>> where the memory usage is diverging from your expectations.
>>>>
>>>> On Fri, May 12, 2017 at 11:21 AM Srinivasa Srikanth Podila <
>>>> [email protected]> wrote:
>>>>
>>>>> Update: I am using multiple poll-handles on same sockfd's. However the
>>>>> poll-handles are from different requests. It is like sending multiple HTTP
>>>>> gets on same socket.
>>>>> Please let me know if any problem with libuv to handle this.
>>>>>
>>>>>
>>>>> On Friday, 12 May 2017 19:11:48 UTC+5:30, Srinivasa Srikanth Podila
>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I am allocating memory for a struct "request" using malloc. The
>>>>>> request object has a uv_poll_handle as a member.
>>>>>>
>>>>>> The request updates its poll_handle on a sockfd *[using
>>>>>> uv_poll_init_socket(loop, &request->poll_handle, sockfd)] *received
>>>>>> by libcurl. After init_socket, i update poll_handle.data to "request"
>>>>>> object so that i could use in uv callback context, and starts polling on 
>>>>>> it
>>>>>> using* [uv_poll_start(&request->poll_handle, events,
>>>>>> poll_req_uv_cb);]*
>>>>>>
>>>>>> Now when i get poll_remove notification from libcurl, I am using 
>>>>>> *[uv_close((uv_handle_t
>>>>>> *)&request->poll_handle, process_request_response)]. *The
>>>>>> process_request_response is close_callback which i am planning to free 
>>>>>> the
>>>>>> allocated "request" object.
>>>>>>
>>>>>> I do it for many request objects in a default-loop continuously. It
>>>>>> works fine for some time and after some time, i see the SIGSEGV as
>>>>>> poll_handle.data is NULL and loop object also NULL in the close callback 
>>>>>> api
>>>>>> *[process_request_response]*.
>>>>>>
>>>>>> Please check the inline gdb logs.
>>>>>>
>>>>>> (gdb) p req
>>>>>> $1 = (uv_handle_t *) 0xe159b0
>>>>>> (gdb) p *req
>>>>>> $2 = {*data = 0x0, loop = 0x0*, type = UV_POLL, close_cb = 0x404b5d
>>>>>> <process_request_response>, handle_queue = {0xe09760, 0x62e6a0}, u = {fd 
>>>>>> =
>>>>>> 0, reserved = {0x0, 0x0, 0x0,
>>>>>>       0x0}}, next_closing = 0xe09740, flags = 3}
>>>>>>
>>>>>> Just before i close the uv_poll_handle, I have a print to ensure if i
>>>>>> have the data.
>>>>>> INFO, 12:54:31.266583, curl_socket_cb, STOP POLL Curl
>>>>>> Handle:0xeb26c0, Request:0xe159a0, poll_handle:0xe159b0
>>>>>> poll_request:0xe159a0
>>>>>>
>>>>>> Please let me know if there is any problem in my design approach (or)
>>>>>> let me know if there is any bug in this area.
>>>>>>
>>>>>> Thanks,
>>>>>> Srikanth
>>>>>>
>>>>> --
>>>>> 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 [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at https://groups.google.com/group/libuv.
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>

-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to