Переглянути джерело

HPCC-23105 Fix errors in Thor generated by -Wall option in gcc 8.3

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 5 роки тому
батько
коміт
d1f43b4945

+ 2 - 0
system/jlib/jsocket.cpp

@@ -7001,3 +7001,5 @@ IWhiteListHandler *createWhiteListHandler(WhiteListPopulateFunction populateFunc
     return new CWhiteListHandler(populateFunc, roleFormatFunc);
 }
 
+static_assert(sizeof(IpAddress) == 16, "check size of IpAddress");
+static_assert(sizeof(SocketEndpoint) == 20, "check size of SocketEndpoint");

+ 7 - 6
system/jlib/jsocket.hpp

@@ -76,9 +76,9 @@ enum JSOCKET_ERROR_CODES {
 //
 class jlib_decl IpAddress
 {
-    unsigned netaddr[4];
+    unsigned netaddr[4] = { 0, 0, 0, 0 };
 public:
-    IpAddress()                                         { ipset(NULL); }
+    IpAddress() = default;
     IpAddress(const IpAddress& other)                   { ipset(other); }
     explicit IpAddress(const char *text)                { ipset(text); }
     
@@ -140,11 +140,11 @@ extern jlib_decl IpAddress &localHostToNIC(IpAddress &ip);
 class jlib_decl SocketEndpoint : extends IpAddress
 {
 public:
-    SocketEndpoint()                                            { set(NULL,0); };
+    SocketEndpoint() = default;
     SocketEndpoint(const char *name,unsigned short _port=0)     { set(name,_port); };
     SocketEndpoint(unsigned short _port)                        { setLocalHost(_port); };
     SocketEndpoint(unsigned short _port, const IpAddress & _ip) { set(_port,_ip); };          
-    SocketEndpoint(const SocketEndpoint &other) : IpAddress(other) { port = other.port; }
+    SocketEndpoint(const SocketEndpoint &other) = default;
 
     void deserialize(MemoryBuffer & in);
     void serialize(MemoryBuffer & out) const;
@@ -168,8 +168,9 @@ public:
 
     unsigned hash(unsigned prev) const;
     
-    unsigned short port;
-
+    unsigned short port = 0;
+    // Ensure that all the bytes in the data structure are initialised to avoid complains from valgrind when it is written to a socket
+    unsigned short portPadding = 0;
 };
 
 class jlib_decl SocketEndpointArray : public StructArrayOf<SocketEndpoint>

+ 1 - 6
thorlcr/activities/thactivityutil.cpp

@@ -274,12 +274,7 @@ IStartableEngineRowStream *createRowStreamLookAhead(CSlaveActivity *activity, IE
 
 void initMetaInfo(ThorDataLinkMetaInfo &info)
 {
-    memset(&info,0,sizeof(info));
-    //info.rowsdone = xx;
-    info.totalRowsMin = 0;          
-    info.totalRowsMax = -1; // rely on inputs to set
-    info.spilled = (offset_t)-1;
-    info.byteTotal = (offset_t)-1;
+    info = {}; // Reset to default values.
 }
 
 void calcMetaInfoSize(ThorDataLinkMetaInfo &info, IThorDataLink *link)

+ 2 - 2
thorlcr/master/mawatchdog.cpp

@@ -170,7 +170,8 @@ unsigned CMasterWatchdogBase::readPacket(HeartBeatPacketHeader &hb, MemoryBuffer
             IWARNLOG("Receive Monitor Packet: wrong size, got %d, less than HeartBeatPacketHeader size", read);
             return 0;
         }
-        memcpy(&hb, mb.readDirect(sizeof(HeartBeatPacketHeader)), sizeof(HeartBeatPacketHeader));
+        //Cast is to avoid warning about writing to an object with non trivial copy assignment
+        memcpy(reinterpret_cast<void *>(&hb), mb.readDirect(sizeof(HeartBeatPacketHeader)), sizeof(HeartBeatPacketHeader));
         if (read != hb.packetSize)  // check for corrupt packets
         {
             IWARNLOG("Receive Monitor Packet: wrong size, expected %d, got %d", hb.packetSize, read);
@@ -294,7 +295,6 @@ public:
             Owned<ISocket> sock = ISocket::udp_connect(getFixedPort(masterEp.port, TPORT_watchdog), ipStr.str());
             // send empty packet, stopped set, will cease reading
             HeartBeatPacketHeader hb;
-            memset(&hb, 0, sizeof(hb));
             hb.packetSize = sizeof(HeartBeatPacketHeader);
             sock->write(&hb, sizeof(HeartBeatPacketHeader));
             sock->close();

+ 3 - 3
thorlcr/shared/thwatchdog.hpp

@@ -29,10 +29,10 @@
 
 struct HeartBeatPacketHeader
 {
-    size32_t packetSize;   // used as validity check must be first
+    size32_t packetSize = 0;   // used as validity check must be first
     SocketEndpoint sender;
-    unsigned tick;         // sequence check
-    size32_t progressSize; // size of progress data (following performamce data)
+    unsigned tick = 0;         // sequence check
+    size32_t progressSize = 0; // size of progress data (following performance data)
 };
 
 #endif

+ 2 - 3
thorlcr/slave/slwatchdog.cpp

@@ -40,8 +40,6 @@ class CGraphProgressHandlerBase : public CSimpleInterface, implements ISlaveWatc
     {
         MemoryBuffer sendMb, progressMb;
         HeartBeatPacketHeader hb;
-        //clear struct, to avoid spurious warnings when serializing raw [unpacked] struct
-        memset(&hb, 0, sizeof(HeartBeatPacketHeader));
         hb.sender = self;
         hb.tick++;
         size32_t progressSizePos = (byte *)&hb.progressSize - (byte *)&hb;
@@ -201,7 +199,8 @@ public:
     virtual void sendData(MemoryBuffer &mb)
     {
         HeartBeatPacketHeader hb;
-        memcpy(&hb, mb.toByteArray(), sizeof(HeartBeatPacketHeader));
+        //Cast is to avoid warning about writing to an object with non trivial copy assignment
+        memcpy(reinterpret_cast<void *>(&hb), mb.toByteArray(), sizeof(HeartBeatPacketHeader));
         if (hb.packetSize > UDP_DATA_MAX)
         {
             IWARNLOG("Progress packet too big! progress lost");

+ 3 - 3
thorlcr/thorutil/thmem.cpp

@@ -601,7 +601,7 @@ void CThorExpandingRowArray::doSort(rowidx_t n, void **const rows, ICompare &com
         parsortvecstableinplace(rows, n, compare, stableTablePtr, maxCores);
     }
     else
-        parqsortvec((void **const)rows, n, compare, maxCores);
+        parqsortvec((void **)rows, n, compare, maxCores);
 }
 
 inline const void **CThorExpandingRowArray::_allocateRowTable(rowidx_t num, unsigned maxSpillCost)
@@ -966,7 +966,7 @@ bool CThorExpandingRowArray::resize(rowidx_t requiredRows, unsigned maxSpillCost
 void CThorExpandingRowArray::sort(ICompare &compare, unsigned maxCores)
 {
     if (numRows>1)
-        doSort(numRows, (void **const)rows, compare, maxCores);
+        doSort(numRows, (void **)rows, compare, maxCores);
 }
 
 void CThorExpandingRowArray::reorder(rowidx_t start, rowidx_t num, rowidx_t *neworder)
@@ -1361,7 +1361,7 @@ void CThorSpillableRowArray::sort(ICompare &compare, unsigned maxCores)
     rowidx_t n = numCommitted();
     if (n>1)
     {
-        void **const rows = (void **const)getBlock(n);
+        void ** rows = (void **)getBlock(n);
         doSort(n, rows, compare, maxCores);
     }
 }