Prevent a hang in incremental-recursion mode when the receiver encounters
an error updating the file:  the receiver now sends MSG_NO_SEND to the
generator so that it knows when all outstanding work is completed.
diff --git a/receiver.c b/receiver.c
index 3fdd895..94421c0 100644
--- a/receiver.c
+++ b/receiver.c
@@ -470,6 +470,8 @@
 					"(Skipping batched update for \"%s\")\n",
 					fname);
 				discard_receive_data(f_in, F_LENGTH(file));
+				if (inc_recurse)
+					send_msg_int(MSG_NO_SEND, ndx);
 				continue;
 			}
 			next_gen_ndx = -1;
@@ -553,6 +555,8 @@
 				full_fname(fnamecmp));
 			discard_receive_data(f_in, F_LENGTH(file));
 			close(fd1);
+			if (inc_recurse)
+				send_msg_int(MSG_NO_SEND, ndx);
 			continue;
 		}
 
@@ -566,6 +570,8 @@
 				full_fname(fnamecmp));
 			discard_receive_data(f_in, F_LENGTH(file));
 			close(fd1);
+			if (inc_recurse)
+				send_msg_int(MSG_NO_SEND, ndx);
 			continue;
 		}
 
@@ -599,6 +605,8 @@
 				discard_receive_data(f_in, F_LENGTH(file));
 				if (fd1 != -1)
 					close(fd1);
+				if (inc_recurse)
+					send_msg_int(MSG_NO_SEND, ndx);
 				continue;
 			}
 		} else {
@@ -606,6 +614,8 @@
 				discard_receive_data(f_in, F_LENGTH(file));
 				if (fd1 != -1)
 					close(fd1);
+				if (inc_recurse)
+					send_msg_int(MSG_NO_SEND, ndx);
 				continue;
 			}
 
@@ -632,6 +642,8 @@
 				discard_receive_data(f_in, F_LENGTH(file));
 				if (fd1 != -1)
 					close(fd1);
+				if (inc_recurse)
+					send_msg_int(MSG_NO_SEND, ndx);
 				continue;
 			}