diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-07-30 23:05:09 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-07-30 23:05:09 +0200 |
commit | 57e69ff2cca9edee3546373d04e0dde6810309e5 (patch) | |
tree | 26bdc4766043b3fef13fa870d151ff3cec4ec011 /src/channel.c | |
parent | 623e263ffb998acacd6fd0de18c44e03af2a47d1 (diff) |
patch 7.4.2131v7.4.2131
Problem: More memory leaks when using partial, e.g. for "exit-cb".
Solution: Don't copy the callback when using a partial.
Diffstat (limited to 'src/channel.c')
-rw-r--r-- | src/channel.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/channel.c b/src/channel.c index 722dcb8de9..3b8b5afa05 100644 --- a/src/channel.c +++ b/src/channel.c @@ -1272,10 +1272,14 @@ channel_set_req_callback( if (item != NULL) { - item->cq_callback = vim_strsave(callback); item->cq_partial = partial; if (partial != NULL) + { ++partial->pt_refcount; + item->cq_callback = callback; + } + else + item->cq_callback = vim_strsave(callback); item->cq_seq_nr = id; item->cq_prev = head->cq_prev; head->cq_prev = item; @@ -4465,10 +4469,14 @@ job_set_options(job_T *job, jobopt_T *opt) } else { - job->jv_exit_cb = vim_strsave(opt->jo_exit_cb); job->jv_exit_partial = opt->jo_exit_partial; if (job->jv_exit_partial != NULL) + { + job->jv_exit_cb = opt->jo_exit_cb; ++job->jv_exit_partial->pt_refcount; + } + else + job->jv_exit_cb = vim_strsave(opt->jo_exit_cb); } } } |