patch 7.4.1438
Problem:    Can't get buffer number of a channel.
Solution:   Add ch_getbufnr().
diff --git a/src/channel.c b/src/channel.c
index ebf8b52..0721ebe 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -787,12 +787,15 @@
     static buf_T *
 find_buffer(char_u *name)
 {
-    buf_T *buf = buflist_findname(name);
+    buf_T *buf = NULL;
     buf_T *save_curbuf = curbuf;
 
+    if (name != NULL && *name != NUL)
+	buf = buflist_findname(name);
     if (buf == NULL)
     {
-	buf = buflist_new(name, NULL, (linenr_T)0, BLN_LISTED);
+	buf = buflist_new(name == NULL ? (char_u *)"" : name,
+					       NULL, (linenr_T)0, BLN_LISTED);
 	buf_copy_options(buf, BCO_ENTER);
 #ifdef FEAT_QUICKFIX
 	clear_string_option(&buf->b_p_bt);
@@ -880,7 +883,7 @@
 	channel->ch_part[PART_OUT].ch_mode = MODE_NL;
 	channel->ch_part[PART_OUT].ch_buffer =
 				       find_buffer(opt->jo_io_name[PART_OUT]);
-	ch_logs(channel, "writing to buffer %s",
+	ch_logs(channel, "writing to buffer '%s'",
 		      (char *)channel->ch_part[PART_OUT].ch_buffer->b_ffname);
     }
 }
@@ -1357,7 +1360,14 @@
 	callback = channel->ch_part[part].ch_callback;
     else
 	callback = channel->ch_callback;
+
     buffer = channel->ch_part[part].ch_buffer;
+    if (buffer != NULL && !buf_valid(buffer))
+    {
+	/* buffer was wiped out */
+	channel->ch_part[part].ch_buffer = NULL;
+	buffer = NULL;
+    }
 
     if (ch_mode == MODE_JSON || ch_mode == MODE_JS)
     {