Linux/Qnx: MessageQ msg cannot be freed if put fails
authorArnie Reynoso <arnier@ti.com>
Fri, 14 Feb 2014 19:53:31 +0000 (11:53 -0800)
committerChris Ring <cring@ti.com>
Tue, 18 Feb 2014 18:05:31 +0000 (10:05 -0800)
MessageQ msg being put to the transport layer can only be freed
if the msg is successfully placed. Otherwise, it's the responsibility
of the application to free the msg.

linux/src/api/MessageQ.c
qnx/src/api/MessageQ.c

index 33aaff184cedd17f9ea96a03604bb1227b1cec4c..1911bffb52ee551f9c50823aecbe351292eb8bb3 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -1124,6 +1124,7 @@ static Int transportPut(MessageQ_Msg msg, UInt16 dstId, UInt16 dstProcId)
         printf ("transportPut: send failed: %d, %s\n",
                   errno, strerror(errno));
         status = MessageQ_E_FAIL;
         printf ("transportPut: send failed: %d, %s\n",
                   errno, strerror(errno));
         status = MessageQ_E_FAIL;
+        goto exit;
     }
 
     /*
     }
 
     /*
@@ -1132,5 +1133,6 @@ static Int transportPut(MessageQ_Msg msg, UInt16 dstId, UInt16 dstProcId)
      */
     MessageQ_free (msg);
 
      */
     MessageQ_free (msg);
 
+exit:
     return (status);
 }
     return (status);
 }
index b9a477caab7b82c15657f8a1eeacc1bf8409e70e..d225ec432f0e18f78daaac4f9005b996bd7b5ef8 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2014, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -958,6 +958,7 @@ static Int transportPut(MessageQ_Msg msg, UInt16 dstId, UInt16 dstProcId)
         printf ("transportPut: write failed: %d, %s\n",
                   errno, strerror(errno));
         status = MessageQ_E_FAIL;
         printf ("transportPut: write failed: %d, %s\n",
                   errno, strerror(errno));
         status = MessageQ_E_FAIL;
+        goto exit;
     }
 
     /*
     }
 
     /*
@@ -966,5 +967,6 @@ static Int transportPut(MessageQ_Msg msg, UInt16 dstId, UInt16 dstProcId)
      */
     MessageQ_free (msg);
 
      */
     MessageQ_free (msg);
 
+exit:
     return (status);
 }
     return (status);
 }