aboutsummaryrefslogtreecommitdiff
path: root/lib/multi.c
AgeCommit message (Collapse)Author
2006-10-12Starting now, adding an easy handle to a multi stack that was already addedDaniel Stenberg
to a multi stack will cause CURLM_BAD_EASY_HANDLE to get returned.
2006-10-12Jeff Pohlmeyer has been working with the hiperfifo.c example source code,Daniel Stenberg
and while doing so it became apparent that the current timeout system for the socket API really was a bit awkward since it become quite some work to be sure we have the correct timeout set. Jeff then provided the new CURLMOPT_TIMERFUNCTION that is yet another callback the app can set to get to know when the general timeout time changes and thus for an application like hiperfifo.c it makes everything a lot easier and nicer. There's a CURLMOPT_TIMERDATA option too of course in good old libcurl tradition.
2006-10-10mark the handle as no longer having a broken pipe when a transfer has failedDaniel Stenberg
2006-10-09when going to completed due to error, mark the handle as not in a pipelineDaniel Stenberg
anymore
2006-10-09Compiler warning fixYang Tse
2006-10-09Bogdan Nicula's second test case (posted Sun, 08 Oct 2006) converted to testDaniel Stenberg
case 535 and it now runs fine. Again a problem with the pipelining code not taking all possible (error) conditions into account.
2006-10-07don't display or act on state changes that doesn't actually change stateDaniel Stenberg
2006-10-06Bogdan Nicula's hanging test case was converted to test case 533 and the testDaniel Stenberg
now runs fine.
2006-10-04Dmitriy Sergeyev provided an example source code that crashed CVS libcurlDaniel Stenberg
but that worked nicely in 7.15.5. I converted it into test case 532 and fixed the problem.
2006-09-28Reported in #1561470 (http://curl.haxx.se/bug/view.cgi?id=1561470), libcurlDaniel Stenberg
would crash if a bad function sequence was used when shutting down after using the multi interface (i.e using easy_cleanup after multi_cleanup) so precautions have been added to make sure it doesn't any more - test case 529 was added to verify.
2006-09-25Compiler warning fixYang Tse
2006-09-21(FTP) a failed upload does not invalidate the control connectionDaniel Stenberg
2006-09-20Michael Wallner's test program again help me track down a problem. This timeDaniel Stenberg
it basically was that we didn't remove the current connection from the pipe list when following a redirect. Also in this commit: several cases of additional debug code for debug builds helping to check and track down some signs of run-time trouble.
2006-09-16Resize the connection cache upwards when adding more handles than whatDaniel Stenberg
currently fits in the cache, to make the cache work better especially for pipelining cases but also for "mere" (persistent) connection re-use.
2006-09-12Compiler warning fixYang Tse
2006-09-11- Fixed my breakage from earlier today so that doing curl_easy_cleanup() on aDaniel Stenberg
handle that is part of a multi handle first removes the handle from the stack. - Added CURLOPT_SSL_SESSIONID_CACHE and --no-sessionid to disable SSL session-ID re-use on demand since there obviously are broken servers out there that misbehave with session-IDs used.
2006-09-10 Jeff Pohlmeyer presented a *multi_socket()-using program that exposed aDaniel Stenberg
problem with it (SIGSEGV-style). It clearly showed that the existing socket-state and state-difference function wasn't good enough so I rewrote it and could then re-run Jeff's program without any crash. The previous version clearly could miss to tell the application when a handle changed from using one socket to using another. While I was at it (as I could use this as a means to track this problem down), I've now added a 'magic' number to the easy handle struct that is inited at curl_easy_init() time and cleared at curl_easy_cleanup() time that we can use internally to detect that an easy handle seems to be fine, or at least not closed or freed (freeing in debug builds fill the area with 0x13 bytes but in normal builds we can of course not assume any particular data in the freed areas).
2006-09-09Compiler warning fixYang Tse
2006-09-08Compilation fixYang Tse
2006-09-07Major overhaul introducing http pipelining support and shared connectionDaniel Stenberg
cache within the multi handle.
2006-08-31Dmitriy Sergeyev found and fixed a multi interface flaw when using asynchDaniel Stenberg
name resolves. It could get stuck in the wrong state.
2006-08-25Armel Asselin reported that the 'running_handles' counter wasn't updatedDaniel Stenberg
properly if you removed a "live" handle from a multi handle with curl_multi_remove_handle().
2006-08-04oops, the previous commit was incomplete as we made an unconditional callDaniel Stenberg
to multi_runsingle() without it being really necessary or good
2006-08-04even when we get a single connection to deal with, we must still check forDaniel Stenberg
timeout'ed connections and possibly deal with them too
2006-08-03removed running_handles argument from multi_runsingle() since it wasn't reallyDaniel Stenberg
used anymore since multi->num_alive was introduced
2006-08-03Silence compiler warning 'unused parameter running_handles' in function ↵Yang Tse
multi_runsingle(). This is done here returning multi->num_alive in the running_handles parameter even when functions that call multi_runsingle() at this moment overwrite the returned value with the one that is valid when those functions curl_multi_perform() and multi_socket() have removed expired timers from the splay. Most probably, parameter 'running_handles' in function multi_runsingle() should be just removed.
2006-08-02keep count of the number of "alive" handles in a struct member, as otherwiseDaniel Stenberg
*multi_socket*() can't return the proper number
2006-08-01spell-fixed a commentDaniel Stenberg
2006-07-30curl_multi_socket() and curl_multi_socket_all() got modified prototypes: theyDaniel Stenberg
both now provide the number of running handles back to the calling function.
2006-07-26[Hiper-related work] Added a function called curl_multi_assign() that willDaniel Stenberg
set a private pointer added to the internal libcurl hash table for the particular socket passed in to this function.
2006-07-17Jari Sundell did some excellent research and bug tracking, figured out thatDaniel Stenberg
we did wrong and patched it: When nodes were removed from the splay tree, and we didn't properly remove it from the splay tree when an easy handle was removed from a multi stack and thus we could wrongly leave a node in the splay tree pointing to (bad) memory.
2006-07-13Oops, missing "u"Yang Tse
2006-07-13Fix compiler warning.Yang Tse
2006-07-10DNS cache must use the multi DNS cache if the easy handle's one is not using ↵Yang Tse
anyone in curl_multi_add_handle.
2006-07-07Ingmar Runge provided a source snippet that caused a crash. The reason forDaniel Stenberg
the crash was that libcurl internally was a bit confused about who owned the DNS cache at all times so if you created an easy handle that uses a shared DNS cache and added that to a multi handle it would crash. Now we keep more careful internal track of exactly what kind of DNS cache each easy handle uses: None, Private (allocated for and used only by this single handle), Shared (points to a cache held by a shared object), Global (points to the global cache) or Multi (points to the cache within the multi handle that is automatically shared between all easy handles that are added with private caches).
2006-06-28fix better minor compiler warningYang Tse
2006-06-28fix minor compiler warningYang Tse
2006-06-23Arve Knudsen found a flaw in curl_multi_fdset() for systems whereDaniel Stenberg
curl_socket_t is unsigned (like Windows) that could cause it to wrongly return a max fd of -1.
2006-06-22Peter Silva introduced CURLOPT_MAX_SEND_SPEED_LARGE andDaniel Stenberg
CURLOPT_MAX_RECV_SPEED_LARGE that limit tha maximum rate libcurl is allowed to send or receive data. This kind of adds the the command line tool's option --limit-rate to the library. The rate limiting logic in the curl app is now removed and is instead provided by libcurl itself. Transfer rate limiting will now also work for -d and -F, which it didn't before.
2006-05-27adapted to the new Curl_splayremovebyaddr() protoDaniel Stenberg
2006-05-26long/int cleanup to silence picky compiler warningsDaniel Stenberg
2006-05-09Robson Braga Araujo fixed a memory leak when you added an easy handle to aDaniel Stenberg
multi stack and that easy handle had already been used to do one or more easy interface transfers, as then the code threw away the previously used DNS cache without properly freeing it.
2006-04-26Fixed signed/unsigned convertion errors in Salford-C.Gisle Vanem
#ifdef around WSAEDISCON in strerror.c.
2006-04-25prevent signed/unsigned warningsDaniel Stenberg
2006-04-21each socket is used by exactly one easy handle, but of course each easy handleDaniel Stenberg
can and will use more than one socket
2006-04-18attempt to silence the MIPSPro compiler warningDaniel Stenberg
2006-04-10First curl_multi_socket() commit. Should primarily be considered as an internalDaniel Stenberg
code rearrange to fit the future better.
2006-02-23argh, forgot the check for a connection before we call Curl_doneDaniel Stenberg
2006-02-23Lots of work and analysis by "xbx___" in bug #1431750Daniel Stenberg
(http://curl.haxx.se/bug/view.cgi?id=1431750) helped me identify and fix two different but related bugs: 1) Removing an easy handle from a multi handle before the transfer is done could leave a connection in the connection cache for that handle that is in a state that isn't suitable for re-use. A subsequent re-use could then read from a NULL pointer and segfault. 2) When an easy handle was removed from the multi handle, there could be an outstanding c-ares DNS name resolve request. When the response arrived, it caused havoc since the connection struct it "belonged" to could've been freed already. Now Curl_done() is called when an easy handle is removed from a multi handle pre-maturely (that is, before the transfer was complteted). Curl_done() also makes sure to cancel all (if any) outstanding c-ares requests.
2006-02-11Karl M added the CURLOPT_CONNECT_ONLY and CURLINFO_LASTSOCKET options thatDaniel Stenberg
an app can use to let libcurl only connect to a remote host and then extract the socket from libcurl. libcurl will then not attempt to do any transfer at all after the connect is done.