patch 7.4.2130
Problem: Pending timers cause false memory leak reports.
Solution: Free all timers on exit.
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index ec9f50a..2cebbeb 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1279,6 +1279,21 @@
}
return abort;
}
+
+# if defined(EXITFREE) || defined(PROTO)
+ void
+timer_free_all()
+{
+ timer_T *timer;
+
+ while (first_timer != NULL)
+ {
+ timer = first_timer;
+ remove_timer(timer);
+ free_timer(timer);
+ }
+}
+# endif
# endif
#if defined(FEAT_SYN_HL) && defined(FEAT_RELTIME) && defined(FEAT_FLOAT)
diff --git a/src/misc2.c b/src/misc2.c
index 281f4af..53469a2 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1224,6 +1224,9 @@
channel_free_all();
job_free_all();
# endif
+#ifdef FEAT_TIMERS
+ timer_free_all();
+#endif
free_termoptions();
diff --git a/src/proto/ex_cmds2.pro b/src/proto/ex_cmds2.pro
index 8d9b72a..c7a860b 100644
--- a/src/proto/ex_cmds2.pro
+++ b/src/proto/ex_cmds2.pro
@@ -18,11 +18,12 @@
void profile_setlimit(long msec, proftime_T *tm);
int profile_passed_limit(proftime_T *tm);
void profile_zero(proftime_T *tm);
-timer_T *create_timer(long msec, int repeats);
+timer_T *create_timer(long msec, int repeat);
long check_due_timer(void);
timer_T *find_timer(int id);
void stop_timer(timer_T *timer);
int set_ref_in_timer(int copyID);
+void timer_free_all(void);
void profile_divide(proftime_T *tm, int count, proftime_T *tm2);
void profile_add(proftime_T *tm, proftime_T *tm2);
void profile_self(proftime_T *self, proftime_T *total, proftime_T *children);
diff --git a/src/version.c b/src/version.c
index 9095355..77a43c1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -764,6 +764,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2130,
+/**/
2129,
/**/
2128,