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,