Hi!

On 03.01.2020 at 17:17, Patrick Monnerat via curl-library wrote:

>> I'm looking for clarification of the behavior of curl_mime_data_cb().
>> Since I'm having to deal with handles possibly duplicated by
>> curl_easy_duphandle(), I'm calling...
>
> As noted in https://curl.haxx.se/libcurl/c/curl_mime_data_cb.html:
>
> -----
>
> Care must be taken if the part is bound to a curl easy handle that is
> later duplicated: the arg pointer argument is also duplicated, resulting
> in the pointed item to be shared between the original and the copied
> handle. In particular, special attention should be given to the freefunc
> procedure code since it will be called twice with the same argument.
>
> -----
>
> You have to deal with that.

I was afraid of this answer, but thank you very much nonetheless! :)

> From your explanations, there are two possible cases:
>
> 1) The file handle is shared between the handles: on curl's point of
> view, this is OK. But beware: reading from a handle advances the file
> offset for both handles!

This is exactly my problem.

> 2) You prefer to duplicate the file handle (In other words, there are
> some handle-specific data in the arg structure). Resolving this is
> tricky and IMHO the easiest way to perform it is to rebuild the mime
> structure yourself for the new handle after curl_easy_duphandle() call.

While I understand that rebuilding the mime structure is the easiest
way, that's unfortunately not easy for the PHP binding I'm working on.

I do not understand, though, how it could be possible to deal with
handle-specific data in the arg structure, since I'm not aware how to
determine which cURL handle had called any of the callbacks.  What am I
missing?

>> Also, I wonder how that would work in combination with the
>> curl_multi_*() functions.  Say, two duplicate handles are combined to a
>> multi handle; couldn't that result in readfunc() being called
>> interleaved on the original and the duplicated handle?

> Yes they can. Easy handles attached to a multi handle are processed
> asynchronously and you have no control on the real operation sequence.

Well, I have to deal with this, one way or another.

Thanks again for your reply!  Much appreciated.

--
Christoph M. Becker

-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.haxx.se/mail/etiquette.html

Reply via email to