test3026: reduce runtime in legacy mingw builds
- Load Windows system libraries secur32 and iphlpapi beforehand, so that libcurl's repeated global init/cleanup only increases/decreases the library's refcount rather than causing it to load/unload. Assisted-by: Marc Hoersken Closes https://github.com/curl/curl/pull/9412
This commit is contained in:
parent
37ca6f0f9a
commit
856b133f5d
@ -69,6 +69,14 @@ int test(char *URL)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* On Windows libcurl global init/cleanup calls LoadLibrary/FreeLibrary for
|
||||
secur32.dll and iphlpapi.dll. Here we load them beforehand so that when
|
||||
libcurl calls LoadLibrary/FreeLibrary it only increases/decreases the
|
||||
library's refcount rather than actually loading/unloading the library,
|
||||
which would affect the test runtime. */
|
||||
(void)win32_load_system_library(TEXT("secur32.dll"));
|
||||
(void)win32_load_system_library(TEXT("iphlpapi.dll"));
|
||||
|
||||
for(i = 0; i < tid_count; i++) {
|
||||
curl_win_thread_handle_t th;
|
||||
results[i] = CURL_LAST; /* initialize with invalid value */
|
||||
|
||||
@ -117,7 +117,6 @@ long tutil_tvdiff(struct timeval newer, struct timeval older)
|
||||
(long)(newer.tv_usec-older.tv_usec)/1000;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Same as tutil_tvdiff but with full usec resolution.
|
||||
*
|
||||
@ -130,3 +129,34 @@ double tutil_tvdiff_secs(struct timeval newer, struct timeval older)
|
||||
(double)(newer.tv_usec-older.tv_usec)/1000000.0;
|
||||
return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
HMODULE win32_load_system_library(const TCHAR *filename)
|
||||
{
|
||||
size_t filenamelen = _tcslen(filename);
|
||||
size_t systemdirlen = GetSystemDirectory(NULL, 0);
|
||||
size_t written;
|
||||
TCHAR *path;
|
||||
|
||||
if(!filenamelen || filenamelen > 32768 ||
|
||||
!systemdirlen || systemdirlen > 32768)
|
||||
return NULL;
|
||||
|
||||
/* systemdirlen includes null character */
|
||||
path = malloc(sizeof(TCHAR) * (systemdirlen + 1 + filenamelen));
|
||||
if(!path)
|
||||
return NULL;
|
||||
|
||||
/* if written >= systemdirlen then nothing was written */
|
||||
written = GetSystemDirectory(path, (unsigned int)systemdirlen);
|
||||
if(!written || written >= systemdirlen)
|
||||
return NULL;
|
||||
|
||||
if(path[written - 1] != _T('\\'))
|
||||
path[written++] = _T('\\');
|
||||
|
||||
_tcscpy(path + written, filename);
|
||||
|
||||
return LoadLibrary(path);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -42,5 +42,8 @@ long tutil_tvdiff(struct timeval t1, struct timeval t2);
|
||||
*/
|
||||
double tutil_tvdiff_secs(struct timeval t1, struct timeval t2);
|
||||
|
||||
#ifdef WIN32
|
||||
HMODULE win32_load_system_library(const TCHAR *filename);
|
||||
#endif
|
||||
|
||||
#endif /* HEADER_CURL_LIBTEST_TESTUTIL_H */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user