David Phillips fix for test 518 and my extension to make it not run on
systems that can't run it fine.
This commit is contained in:
parent
f84d2b4d36
commit
a4e1ac7952
5
CHANGES
5
CHANGES
@ -6,6 +6,11 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
Daniel (22 November 2004)
|
||||||
|
- David Phillips enhanced test 518. I made it depend on a "feature" so that
|
||||||
|
systems without getrlimit() won't attempt to test 518. configure now checks
|
||||||
|
for getrlimit() and setrlimit() for this test case.
|
||||||
|
|
||||||
Daniel (18 November 2004)
|
Daniel (18 November 2004)
|
||||||
- David Phillips fixed libcurl to not crash anymore when more than FD_SETSIZE
|
- David Phillips fixed libcurl to not crash anymore when more than FD_SETSIZE
|
||||||
file descriptors are in use. Test case 518 added to verify.
|
file descriptors are in use. Test case 518 added to verify.
|
||||||
|
@ -1138,6 +1138,7 @@ AC_CHECK_HEADERS(
|
|||||||
utime.h \
|
utime.h \
|
||||||
sys/utime.h \
|
sys/utime.h \
|
||||||
sys/poll.h \
|
sys/poll.h \
|
||||||
|
sys/resource.h \
|
||||||
libgen.h \
|
libgen.h \
|
||||||
locale.h \
|
locale.h \
|
||||||
setjmp.h,
|
setjmp.h,
|
||||||
@ -1240,7 +1241,9 @@ AC_CHECK_FUNCS( strtoll \
|
|||||||
setlocale \
|
setlocale \
|
||||||
ftruncate \
|
ftruncate \
|
||||||
pipe \
|
pipe \
|
||||||
poll,
|
poll \
|
||||||
|
getrlimit \
|
||||||
|
setrlimit,
|
||||||
dnl if found
|
dnl if found
|
||||||
[],
|
[],
|
||||||
dnl if not found, $ac_func is the name we check for
|
dnl if not found, $ac_func is the name we check for
|
||||||
|
@ -85,6 +85,7 @@ SSL
|
|||||||
netrc_debug
|
netrc_debug
|
||||||
large_file
|
large_file
|
||||||
idn
|
idn
|
||||||
|
getrlimit
|
||||||
</features>
|
</features>
|
||||||
|
|
||||||
<killserver>
|
<killserver>
|
||||||
|
@ -22,6 +22,9 @@ Funny-head: yesyes
|
|||||||
<server>
|
<server>
|
||||||
http
|
http
|
||||||
</server>
|
</server>
|
||||||
|
<features>
|
||||||
|
getrlimit
|
||||||
|
</features>
|
||||||
# tool is what to use instead of 'curl'
|
# tool is what to use instead of 'curl'
|
||||||
<tool>
|
<tool>
|
||||||
lib518
|
lib518
|
||||||
@ -38,8 +41,11 @@ http://%HOSTIP:%HTTPPORT/518
|
|||||||
#
|
#
|
||||||
# Verify data after the test has been "shot"
|
# Verify data after the test has been "shot"
|
||||||
<verify>
|
<verify>
|
||||||
# CURLE_FAILED_INIT (2)
|
<protocol>
|
||||||
<errorcode>
|
GET /518 HTTP/1.1
|
||||||
2
|
Host: 127.0.0.1:%HTTPPORT
|
||||||
</errorcode>
|
Pragma: no-cache
|
||||||
|
Accept: */*
|
||||||
|
|
||||||
|
</protocol>
|
||||||
</verify>
|
</verify>
|
||||||
|
@ -1,8 +1,23 @@
|
|||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_STAT_H
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_RESOURCE_H
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_FCNTL_H
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#endif
|
||||||
|
#ifdef UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <mprintf.h>
|
#include <mprintf.h>
|
||||||
|
|
||||||
@ -15,6 +30,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NUM_OPEN (FD_SETSIZE + 10)
|
#define NUM_OPEN (FD_SETSIZE + 10)
|
||||||
|
#define NUM_NEEDED (NUM_OPEN + 16)
|
||||||
|
|
||||||
#if defined(WIN32) || defined(_WIN32) || defined(MSDOS)
|
#if defined(WIN32) || defined(_WIN32) || defined(MSDOS)
|
||||||
#define DEV_NULL "NUL"
|
#define DEV_NULL "NUL"
|
||||||
@ -22,24 +38,56 @@
|
|||||||
#define DEV_NULL "/dev/null"
|
#define DEV_NULL "/dev/null"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
|
||||||
int test(char *URL)
|
int test(char *URL)
|
||||||
{
|
{
|
||||||
CURLcode res;
|
struct rlimit rl;
|
||||||
CURL *curl;
|
|
||||||
int fd[NUM_OPEN];
|
int fd[NUM_OPEN];
|
||||||
int i;
|
int i;
|
||||||
|
CURLcode res;
|
||||||
|
CURL *curl;
|
||||||
|
|
||||||
/* open a lot of file descriptors */
|
/* get open file limits */
|
||||||
for (i = 0; i < NUM_OPEN; i++) {
|
if (getrlimit(RLIMIT_NOFILE, &rl) == -1) {
|
||||||
fd[i] = open(DEV_NULL, O_RDONLY);
|
fprintf(stderr, "warning: getrlimit: failed to get RLIMIT_NOFILE\n");
|
||||||
|
goto skip_open;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check that hard limit is high enough */
|
||||||
|
if (rl.rlim_max < NUM_NEEDED) {
|
||||||
|
fprintf(stderr, "warning: RLIMIT_NOFILE hard limit is too low\n");
|
||||||
|
goto skip_open;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* increase soft limit if needed */
|
||||||
|
if (rl.rlim_cur < NUM_NEEDED) {
|
||||||
|
rl.rlim_cur = NUM_NEEDED;
|
||||||
|
if (setrlimit(RLIMIT_NOFILE, &rl) == -1) {
|
||||||
|
fprintf(stderr, "warning: setrlimit: failed to set RLIMIT_NOFILE\n");
|
||||||
|
goto skip_open;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* open a dummy descriptor */
|
||||||
|
fd[0] = open(DEV_NULL, O_RDONLY);
|
||||||
|
if (fd[0] == -1) {
|
||||||
|
fprintf(stderr, "open: failed to open %s\n", DEV_NULL);
|
||||||
|
return CURLE_FAILED_INIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create a bunch of file descriptors */
|
||||||
|
for (i = 1; i < NUM_OPEN; i++) {
|
||||||
|
fd[i] = dup(fd[0]);
|
||||||
if (fd[i] == -1) {
|
if (fd[i] == -1) {
|
||||||
fprintf(stderr, "open: attempt #%i: failed to open %s\n", i, DEV_NULL);
|
fprintf(stderr, "dup: attempt #%i failed\n", i);
|
||||||
for (i--; i >= 0; i--)
|
for (i--; i >= 0; i--)
|
||||||
close(fd[i]);
|
close(fd[i]);
|
||||||
return CURLE_FAILED_INIT;
|
return CURLE_FAILED_INIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
skip_open:
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, URL);
|
curl_easy_setopt(curl, CURLOPT_URL, URL);
|
||||||
curl_easy_setopt(curl, CURLOPT_HEADER, TRUE);
|
curl_easy_setopt(curl, CURLOPT_HEADER, TRUE);
|
||||||
@ -51,3 +99,12 @@ int test(char *URL)
|
|||||||
|
|
||||||
return (int)res;
|
return (int)res;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* system lacks getrlimit() and/or setrlimit() */
|
||||||
|
int test(char *URL)
|
||||||
|
{
|
||||||
|
(void)URL;
|
||||||
|
fprintf(stderr, "system lacks necessary system function(s)");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -95,6 +95,7 @@ my $gdb = checkcmd("gdb");
|
|||||||
my $ssl_version; # set if libcurl is built with SSL support
|
my $ssl_version; # set if libcurl is built with SSL support
|
||||||
my $large_file; # set if libcurl is built with large file support
|
my $large_file; # set if libcurl is built with large file support
|
||||||
my $has_idn; # set if libcurl is built with IDN support
|
my $has_idn; # set if libcurl is built with IDN support
|
||||||
|
my $has_getrlimit; # set if system has getrlimit()
|
||||||
|
|
||||||
my $skipped=0; # number of tests skipped; reported in main loop
|
my $skipped=0; # number of tests skipped; reported in main loop
|
||||||
my %skipped; # skipped{reason}=counter, reasons for skip
|
my %skipped; # skipped{reason}=counter, reasons for skip
|
||||||
@ -763,6 +764,16 @@ sub checkcurl {
|
|||||||
die "couldn't run '$CURL'"
|
die "couldn't run '$CURL'"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(-r "../lib/config.h") {
|
||||||
|
open(CONF, "<../lib/config.h");
|
||||||
|
while(<CONF>) {
|
||||||
|
if($_ =~ /^\#define HAVE_GETRLIMIT/) {
|
||||||
|
$has_getrlimit = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(CONF);
|
||||||
|
}
|
||||||
|
|
||||||
if(!$curl_debug && $torture) {
|
if(!$curl_debug && $torture) {
|
||||||
die "can't run torture tests since curl was not build with debug";
|
die "can't run torture tests since curl was not build with debug";
|
||||||
}
|
}
|
||||||
@ -862,6 +873,11 @@ sub singletest {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
elsif($f eq "getrlimit") {
|
||||||
|
if($has_getrlimit) {
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$why = "curl lacks $f support";
|
$why = "curl lacks $f support";
|
||||||
$serverproblem = 15; # set it here
|
$serverproblem = 15; # set it here
|
||||||
|
Loading…
x
Reference in New Issue
Block a user