[PATCH] Perform endian conversion on a local copy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The problem seen was that in a mixed endian environment that had to retransmit
messages, the message would be received with the msg_count fields already
swapped.

To resolve the problem a local variable is used to store the swapped value.

Signed-off-by: John Thompson <thompa26@xxxxxxxxx>
---
 exec/totempg.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/exec/totempg.c b/exec/totempg.c
index fe111b1..fc2c15a 100644
--- a/exec/totempg.c
+++ b/exec/totempg.c
@@ -640,10 +640,12 @@ static void totempg_deliver_fn (
 
     mcast = (struct totempg_mcast *)msg;
     if (endian_conversion_required) {
-        mcast->msg_count = swab16 (mcast->msg_count);
+        msg_count = swab16 (mcast->msg_count);
+    }
+    else {
+        msg_count = mcast->msg_count;
     }
 
-    msg_count = mcast->msg_count;
     datasize = sizeof (struct totempg_mcast) +
         msg_count * sizeof (unsigned short);
 
@@ -652,7 +654,7 @@ static void totempg_deliver_fn (
 
     msg_lens = (unsigned short *) (header + sizeof (struct totempg_mcast));
     if (endian_conversion_required) {
-        for (i = 0; i < mcast->msg_count; i++) {
+        for (i = 0; i < msg_count; i++) {
             msg_lens[i] = swab16 (msg_lens[i]);
         }
     }
@@ -666,7 +668,7 @@ static void totempg_deliver_fn (
      * then adjust the assembly buffer so we can add the rest of the
      * fragment when it arrives.
      */
-    msg_count = mcast->fragmented ? mcast->msg_count - 1 : mcast->msg_count;
+    msg_count = mcast->fragmented ? msg_count - 1 : msg_count;
     continuation = mcast->continuation;
     iov_delv.iov_base = (void *)&assembly->data[0];
     iov_delv.iov_len = assembly->index + msg_lens[0];
@@ -724,7 +726,7 @@ static void totempg_deliver_fn (
         /*
          * Message is fragmented, keep around assembly list
          */
-        if (mcast->msg_count > 1) {
+        if (msg_count > 1) {
             memmove (&assembly->data[0],
                 &assembly->data[assembly->index],
                 msg_lens[msg_count]);
--
1.7.9.5
_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss

[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux