Преглед на файлове

totempg: Fix corrupted messages

Commit 54f1f1bdbf6202da12581abb0f6543a0a6b9e7fd changed copy_len
to iovec[i].iov_len, assuming,
copy_len is always the same as iovec[i].iov_len under those
circumstances, but it missed the possability of small message being
partly put at the end of packet, which cuts this message in two parts
and therefore making copy_len not equal to iovec[i].iov_len.

This is revert of 54f1f1bdbf6202da12581abb0f6543a0a6b9e7fd

(backported from master 105f3ae98c06f6a9ca4b5d5a9c1ea6d025115b79)

Signed-off-by: Rytis Karpuška <rytisk@neurotechnology.com>
Reviewed-by: Jan Friesse <jfriesse@redhat.com>
Rytis Karpuška преди 8 години
родител
ревизия
646c0d0dfa
променени са 1 файла, в които са добавени 3 реда и са изтрити 3 реда
  1. 3 3
      exec/totempg.c

+ 3 - 3
exec/totempg.c

@@ -919,9 +919,9 @@ static int mcast_msg (
 			(max_packet_size - sizeof (unsigned short))) {
 
 			memcpy (&fragmentation_data[fragment_size],
-				(char *)iovec[i].iov_base + copy_base, iovec[i].iov_len);
-			fragment_size += iovec[i].iov_len;
-			mcast_packed_msg_lens[mcast_packed_msg_count] += iovec[i].iov_len;
+				(char *)iovec[i].iov_base + copy_base, copy_len);
+			fragment_size += copy_len;
+			mcast_packed_msg_lens[mcast_packed_msg_count] += copy_len;
 			next_fragment = 1;
 			copy_len = 0;
 			copy_base = 0;