diff options
author | Donovan Baarda <abo@minkirri.apana.org.au> | 2021-09-14 16:44:55 +1000 |
---|---|---|
committer | Donovan Baarda <abo@minkirri.apana.org.au> | 2021-09-14 16:44:55 +1000 |
commit | 6f7a5f7f82c165a66048e5b644835f7b1bcc1e52 (patch) | |
tree | 08a4e7d5b6387997da49b85683a51d7e25691f10 | |
parent | f330d5e50c904fe1f732471bc52c2b2af4bbd818 (diff) | |
download | librsync-6f7a5f7f82c165a66048e5b644835f7b1bcc1e52.tar.gz |
Add MAX_DELTA_CMD in job.h for buffer scaling.
This gives us a single point for defining the size used for delta commands and
streaming buffers.
In job.h define MAX_DELTA_CMD to be the maximum size of a single delta command
at 64K.
In delta.c use MAX_DELTA_CMD to define MAX_MISS_LEN and use it to get the
minimum readahead size in rs_getinput().
In whole.c use MAX_DELTA_CMD for defining the buffer sizes used for delta and
patch operations.
-rw-r--r-- | src/delta.c | 4 | ||||
-rw-r--r-- | src/job.h | 11 | ||||
-rw-r--r-- | src/whole.c | 9 |
3 files changed, 15 insertions, 9 deletions
diff --git a/src/delta.c b/src/delta.c index fcfcf5a..9ee56e7 100644 --- a/src/delta.c +++ b/src/delta.c @@ -99,7 +99,7 @@ #include "trace.h" /** Max length of a miss is 64K including 3 command bytes. */ -#define MAX_MISS_LEN ((1<<16)-3) +#define MAX_MISS_LEN (MAX_DELTA_CMD - 3) static rs_result rs_delta_s_scan(rs_job_t *job); static rs_result rs_delta_s_flush(rs_job_t *job); @@ -208,7 +208,7 @@ static rs_result rs_delta_s_end(rs_job_t *job) static inline rs_result rs_getinput(rs_job_t *job, size_t block_len) { - size_t min_len = block_len + MAX_MISS_LEN + 1; + size_t min_len = block_len + MAX_DELTA_CMD; job->scan_len = rs_scoop_avail(job); if (job->scan_len < min_len && !job->stream->eof_in) @@ -35,6 +35,14 @@ # include "checksum.h" # include "librsync.h" +/** Magic job tag number for checking jobs have been initialized. */ +# define RS_JOB_TAG 20010225 + +/** Max length of a singled delta command is including command bytes. + * + * This is used to constrain and set the internal buffer sizes. */ +# define MAX_DELTA_CMD (1<<16) + /** The contents of this structure are private. */ struct rs_job { int dogtag; @@ -115,9 +123,6 @@ struct rs_job { rs_job_t *rs_job_new(const char *, rs_result (*statefn)(rs_job_t *)); -/** Magic job tag number for checking jobs have been initialized. */ -# define RS_JOB_TAG 20010225 - /** Assert that a job is valid. * * We don't use a static inline function here so that assert failure output diff --git a/src/whole.c b/src/whole.c index ec44967..e667f88 100644 --- a/src/whole.c +++ b/src/whole.c @@ -111,9 +111,9 @@ rs_result rs_delta_file(rs_signature_t *sig, FILE *new_file, FILE *delta_file, rs_result r; job = rs_delta_begin(sig); - /* Size inbuf for 4*(64K + 1 block), outbuf for 4*(64K). */ + /* Size inbuf for 4*(CMD + 1 block), outbuf for 4*CMD. */ r = rs_whole_run(job, new_file, delta_file, - 4 * ((1 << 16) + sig->block_len), 4 * (1 << 16)); + 4 * (MAX_DELTA_CMD + sig->block_len), 4 * MAX_DELTA_CMD); if (stats) memcpy(stats, &job->stats, sizeof *stats); rs_job_free(job); @@ -127,8 +127,9 @@ rs_result rs_patch_file(FILE *basis_file, FILE *delta_file, FILE *new_file, rs_result r; job = rs_patch_begin(rs_file_copy_cb, basis_file); - /* Default size inbuf and outbuf 64K. */ - r = rs_whole_run(job, delta_file, new_file, 64 * 1024, 64 * 1024); + /* Default size inbuf 1*CMD and outbuf 4*CMD. */ + r = rs_whole_run(job, delta_file, new_file, MAX_DELTA_CMD, + 4 * MAX_DELTA_CMD); if (stats) memcpy(stats, &job->stats, sizeof *stats); rs_job_free(job); |