Browse Source

HPCC-22818 Ensure default packed and scanning allocators used.

Signed-off-by: Jake Smith <jake.smith@lexisnexisrisk.com>
Jake Smith 5 years ago
parent
commit
a059ecba0f
3 changed files with 10 additions and 5 deletions
  1. 4 0
      thorlcr/graph/thgraph.cpp
  2. 4 2
      thorlcr/graph/thgraph.hpp
  3. 2 3
      thorlcr/thorutil/thmem.cpp

+ 4 - 0
thorlcr/graph/thgraph.cpp

@@ -3081,6 +3081,10 @@ CActivityBase::CActivityBase(CGraphElementBase *_container) : container(*_contai
     baseHelper.set(container.queryHelper());
     parentExtractSz = 0;
     parentExtract = NULL;
+
+    defaultRoxieMemHeapFlags = (roxiemem::RoxieHeapFlags)container.getOptInt("heapflags", defaultHeapFlags);
+    if (container.queryJob().queryUsePackedAllocators())
+        defaultRoxieMemHeapFlags = (roxiemem::RoxieHeapFlags)(defaultRoxieMemHeapFlags | roxiemem::RHFpacked);
 }
 
 CActivityBase::~CActivityBase()

+ 4 - 2
thorlcr/graph/thgraph.hpp

@@ -60,7 +60,7 @@
 
 
 enum ActivityAttributes { ActAttr_Source=1, ActAttr_Sink=2 };
-const static unsigned defaultHeapFlags = roxiemem::RHFscanning;
+const static roxiemem::RoxieHeapFlags defaultHeapFlags = roxiemem::RHFscanning;
 
 #define INVALID_UNIQ_ID -1;
 typedef activity_id unique_id;
@@ -853,6 +853,7 @@ public:
     CJobBase(ILoadedDllEntry *querySo, const char *graphName);
     virtual void beforeDispose() override;
 
+    inline bool queryUsePackedAllocators() const { return usePackedAllocator; }
     unsigned queryMaxLfnBlockTimeMins() const { return maxLfnBlockTimeMins; }
     virtual void addChannel(IMPServer *mpServer) = 0;
     CJobChannel &queryJobChannel(unsigned c) const;
@@ -1045,6 +1046,7 @@ class graph_decl CActivityBase : implements CInterfaceOf<IThorRowInterfaces>, im
     CSingletonLock CABallocatorlock;
     CSingletonLock CABserializerlock;
     CSingletonLock CABdeserializerlock;
+    roxiemem::RoxieHeapFlags defaultRoxieMemHeapFlags = roxiemem::RHFnone;
 
 protected:
     CGraphElementBase &container;
@@ -1075,7 +1077,7 @@ public:
     inline bool queryInitialized() const { return initialized; }
     inline void setInitialized(bool tf) { initialized = tf; }
     inline bool queryTimeActivities() const { return timeActivities; }
-    inline roxiemem::RoxieHeapFlags queryHeapFlags() const { return (roxiemem::RoxieHeapFlags)container.getOptInt("heapflags", defaultHeapFlags); }
+    inline roxiemem::RoxieHeapFlags queryHeapFlags() const { return defaultRoxieMemHeapFlags; }
 
     void onStart(size32_t _parentExtractSz, const byte *_parentExtract) { parentExtractSz = _parentExtractSz; parentExtract = _parentExtract; }
     bool receiveMsg(ICommunicator &comm, CMessageBuffer &mb, const rank_t rank, const mptag_t mpTag, rank_t *sender=NULL, unsigned timeout=MP_WAIT_FOREVER);

+ 2 - 3
thorlcr/thorutil/thmem.cpp

@@ -2463,10 +2463,9 @@ IThorAllocator *createThorAllocator(unsigned memLimitMB, unsigned sharedMemLimit
 {
     PROGLOG("Thor allocator: Size=%d (MB), sharedLimit=%d (MB), CRC=%s, Packed=%s", memLimitMB, sharedMemLimitMB, crcChecking?"ON":"OFF", usePacked?"ON":"OFF");
     roxiemem::RoxieHeapFlags flags;
+    flags = defaultHeapFlags;
     if (usePacked)
-        flags = roxiemem::RHFpacked;
-    else
-        flags = roxiemem::RHFnone;
+        flags = (roxiemem::RoxieHeapFlags)(flags | roxiemem::RHFpacked);
     dbgassertex(numChannels);
     dbgassertex((1==numChannels) || sharedMemLimitMB);
     if (crcChecking)