Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
curl: create easy handles on-demand and not ahead of time
This should again enable crazy-large download ranges of the style
[1-10000000] that otherwise easily ran out of memory starting in 7.66.0
when this new handle allocating scheme was introduced.

Reported-by: Peter Sumatra
Fixes #4393
Closes #4438
  • Loading branch information
bagder committed Oct 2, 2019
1 parent c124e6b commit e59371a
Show file tree
Hide file tree
Showing 7 changed files with 309 additions and 220 deletions.
19 changes: 16 additions & 3 deletions src/tool_cfgable.h
Expand Up @@ -22,11 +22,9 @@
*
***************************************************************************/
#include "tool_setup.h"

#include "tool_sdecls.h"

#include "tool_metalink.h"

#include "tool_urlglob.h"
#include "tool_formparse.h"

typedef enum {
Expand All @@ -37,6 +35,20 @@ typedef enum {

struct GlobalConfig;

struct State {
struct getout *urlnode;
URLGlob *inglob;
URLGlob *urls;
char *outfiles;
char *httpgetfields;
char *uploadfile;
unsigned long infilenum; /* number of files to upload */
unsigned long up; /* upload file counter within a single upload glob */
unsigned long urlnum; /* how many iterations this single URL has with ranges
etc */
unsigned long li;
};

struct OperationConfig {
bool remote_time;
char *random_file;
Expand Down Expand Up @@ -262,6 +274,7 @@ struct OperationConfig {
struct GlobalConfig *global;
struct OperationConfig *prev;
struct OperationConfig *next; /* Always last in the struct */
struct State state; /* for create_transfer() */
};

struct GlobalConfig {
Expand Down
12 changes: 7 additions & 5 deletions src/tool_metalink.c
Expand Up @@ -984,12 +984,14 @@ void delete_metalinkfile(metalinkfile *mlfile)

void clean_metalink(struct OperationConfig *config)
{
while(config->metalinkfile_list) {
metalinkfile *mlfile = config->metalinkfile_list;
config->metalinkfile_list = config->metalinkfile_list->next;
delete_metalinkfile(mlfile);
if(config) {
while(config->metalinkfile_list) {
metalinkfile *mlfile = config->metalinkfile_list;
config->metalinkfile_list = config->metalinkfile_list->next;
delete_metalinkfile(mlfile);
}
config->metalinkfile_last = 0;
}
config->metalinkfile_last = 0;
}

void metalink_cleanup(void)
Expand Down

0 comments on commit e59371a

Please sign in to comment.