mirror of
https://github.com/curl/curl.git
synced 2026-08-02 09:30:29 +03:00
curl: --test-duphandle in debug builds runs "duphandled"
Using this option (only available in debug builds) makes curl always call curl_easy_duphandle() on the handle before using it. To help us catch curl_easy_duphandle() mistakes better. Add a CI job using this. Bonus: the previous runtests option -e is now also supported as --test-event Closes #15504
This commit is contained in:
parent
354f3f96a1
commit
cbafcec50b
19 changed files with 93 additions and 10 deletions
|
|
@ -330,6 +330,7 @@ struct GlobalConfig {
|
|||
long ms_per_transfer; /* start next transfer after (at least) this
|
||||
many milliseconds */
|
||||
#ifdef DEBUGBUILD
|
||||
bool test_duphandle;
|
||||
bool test_event_based;
|
||||
#endif
|
||||
bool parallel;
|
||||
|
|
|
|||
|
|
@ -312,7 +312,10 @@ static const struct LongShort aliases[]= {
|
|||
{"tcp-fastopen", ARG_BOOL, ' ', C_TCP_FASTOPEN},
|
||||
{"tcp-nodelay", ARG_BOOL, ' ', C_TCP_NODELAY},
|
||||
{"telnet-option", ARG_STRG, 't', C_TELNET_OPTION},
|
||||
#ifdef DEBUGBUILD
|
||||
{"test-duphandle", ARG_BOOL, ' ', C_TEST_DUPHANDLE},
|
||||
{"test-event", ARG_BOOL, ' ', C_TEST_EVENT},
|
||||
#endif
|
||||
{"tftp-blksize", ARG_STRG, ' ', C_TFTP_BLKSIZE},
|
||||
{"tftp-no-options", ARG_BOOL, ' ', C_TFTP_NO_OPTIONS},
|
||||
{"time-cond", ARG_STRG, 'z', C_TIME_COND},
|
||||
|
|
@ -1653,13 +1656,14 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
|||
case C_SASL_IR: /* --sasl-ir */
|
||||
config->sasl_ir = toggle;
|
||||
break;
|
||||
case C_TEST_EVENT: /* --test-event */
|
||||
#ifdef DEBUGBUILD
|
||||
global->test_event_based = toggle;
|
||||
#else
|
||||
warnf(global, "--test-event is ignored unless a debug build");
|
||||
#endif
|
||||
case C_TEST_DUPHANDLE: /* --test-duphandle */
|
||||
global->test_duphandle = toggle;
|
||||
break;
|
||||
case C_TEST_EVENT: /* --test-event */
|
||||
global->test_event_based = toggle;
|
||||
break;
|
||||
#endif
|
||||
case C_UNIX_SOCKET: /* --unix-socket */
|
||||
config->abstract_unix_socket = FALSE;
|
||||
err = getstr(&config->unix_socket_path, nextarg, DENY_BLANK);
|
||||
|
|
|
|||
|
|
@ -267,6 +267,7 @@ typedef enum {
|
|||
C_TCP_FASTOPEN,
|
||||
C_TCP_NODELAY,
|
||||
C_TELNET_OPTION,
|
||||
C_TEST_DUPHANDLE,
|
||||
C_TEST_EVENT,
|
||||
C_TFTP_BLKSIZE,
|
||||
C_TFTP_NO_OPTIONS,
|
||||
|
|
|
|||
|
|
@ -2885,6 +2885,17 @@ static CURLcode serial_transfers(struct GlobalConfig *global,
|
|||
if(getenv("CURL_FORBID_REUSE"))
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_FORBID_REUSE, 1L);
|
||||
|
||||
if(global->test_duphandle) {
|
||||
CURL *dup = curl_easy_duphandle(per->curl);
|
||||
curl_easy_cleanup(per->curl);
|
||||
per->curl = dup;
|
||||
if(!dup) {
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
break;
|
||||
}
|
||||
/* a duplicate needs the share re-added */
|
||||
(void)curl_easy_setopt(per->curl, CURLOPT_SHARE, share);
|
||||
}
|
||||
if(global->test_event_based)
|
||||
result = curl_easy_perform_ev(per->curl);
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue