# HG changeset patch # User Bram Moolenaar # Date 1350783965 -7200 # Node ID f69321485951a3c9bd0e9e7484a1901b94cae726 # Parent c3036f1dca68ccd52e4abe60f22e002b763dd657 updated for version 7.3.703 Problem: When 'undofile' is reset the hash is computed unnecessarily. Solution: Only compute the hash when the option was set. (Christian Brabandt) diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -7573,24 +7573,30 @@ set_bool_option(opt_idx, varp, value, op /* 'undofile' */ else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf) { - char_u hash[UNDO_HASH_SIZE]; - buf_T *save_curbuf = curbuf; - - for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) - { - /* When 'undofile' is set globally: for every buffer, otherwise - * only for the current buffer: Try to read in the undofile, if - * one exists and the buffer wasn't changed and the buffer was - * loaded. */ - if ((curbuf == save_curbuf + /* Only take action when the option was set. When reset we do not + * delete the undo file, the option may be set again without making + * any changes in between. */ + if (curbuf->b_p_udf || p_udf) + { + char_u hash[UNDO_HASH_SIZE]; + buf_T *save_curbuf = curbuf; + + for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) + { + /* When 'undofile' is set globally: for every buffer, otherwise + * only for the current buffer: Try to read in the undofile, + * if one exists, the buffer wasn't changed and the buffer was + * loaded */ + if ((curbuf == save_curbuf || (opt_flags & OPT_GLOBAL) || opt_flags == 0) - && !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL) - { - u_compute_hash(hash); - u_read_undo(NULL, hash, curbuf->b_fname); - } - } - curbuf = save_curbuf; + && !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL) + { + u_compute_hash(hash); + u_read_undo(NULL, hash, curbuf->b_fname); + } + } + curbuf = save_curbuf; + } } #endif diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -720,6 +720,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 703, +/**/ 702, /**/ 701,