patch 8.0.1083: leaking memory in input part of channel

Problem:    Leaking memory in input part of channel.
Solution:   Clear the input part of channel.  Free the entry. Move failing
            command test to a separate file to avoid bogus leak reports
            clouding tests that should not leak.
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index ad95b1b..b979c97 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -194,6 +194,7 @@
 	    test_system.res \
 	    test_tcl.res \
 	    test_terminal.res \
+	    test_terminal_fail.res \
 	    test_textobjects.res \
 	    test_undo.res \
 	    test_usercommands.res \
diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim
index 004c2c3..738c3d4 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -608,14 +608,6 @@
   endif
 
   if has('unix')
-    let buf = term_start('xyzabc', {'err_io': 'file', 'err_name': 'Xfile'})
-    call term_wait(buf)
-    call WaitFor('len(readfile("Xfile")) > 0')
-    call assert_match('executing job failed', readfile('Xfile')[0])
-    call WaitFor('!&modified')
-    call delete('Xfile')
-    bwipe
-
     call writefile(['one line'], 'Xfile')
     let buf = term_start('cat', {'in_io': 'file', 'in_name': 'Xfile'})
     call term_wait(buf)
diff --git a/src/testdir/test_terminal_fail.vim b/src/testdir/test_terminal_fail.vim
new file mode 100644
index 0000000..aad4b98
--- /dev/null
+++ b/src/testdir/test_terminal_fail.vim
@@ -0,0 +1,21 @@
+" This test is in a separate file, because it usually causes reports for memory
+" leaks under valgrind.  That is because when fork/exec fails memory is not
+" freed.  Since the process exists right away it's not a real leak.
+
+if !has('terminal')
+  finish
+endif
+
+source shared.vim
+
+func Test_terminal_redir_fails()
+  if has('unix')
+    let buf = term_start('xyzabc', {'err_io': 'file', 'err_name': 'Xfile'})
+    call term_wait(buf)
+    call WaitFor('len(readfile("Xfile")) > 0')
+    call assert_match('executing job failed', readfile('Xfile')[0])
+    call WaitFor('!&modified')
+    call delete('Xfile')
+    bwipe
+  endif
+endfunc