Verified Commit c02ef922 authored by Michael R. Crusoe's avatar Michael R. Crusoe 🏳️‍🌈
Browse files

Apply patch for jemalloc-5. Thank you Faidon Liambotis!

parent be18902a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
spades (3.13.0+dfsg-2~0jemalloc5) experimental; urgency=medium

  * Apply patch for jemalloc-5. Thank you Faidon Liambotis!

 -- Michael R. Crusoe <michael.crusoe@gmail.com>  Wed, 09 Jan 2019 23:52:01 -0800

spades (3.13.0+dfsg-1) unstable; urgency=medium

  * New upstream version
+73 −0
Original line number Diff line number Diff line
Author: Faidon Liambotis <paravoid@debian.org>
Description: Add jemalloc 3.6.0+ compatibility
--- a/src/common/adt/kmer_vector.hpp
+++ b/src/common/adt/kmer_vector.hpp
@@ -26,18 +26,12 @@ private:
 
     ElTy *realloc() {
 #ifdef SPADES_USE_JEMALLOC
-        // First, try to expand in-place
-        if (storage_ && sizeof(ElTy) * capacity_ * el_sz_ > 4096 &&
-            je_rallocm((void **) &storage_, NULL, sizeof(ElTy) * capacity_ * el_sz_, 0, ALLOCM_NO_MOVE) ==
-            ALLOCM_SUCCESS)
-            return storage_;
-
-        // Failed, do usual malloc / memcpy / free cycle
-        ElTy *res = (ElTy *) je_malloc(sizeof(ElTy) * capacity_ * el_sz_);
-        if (storage_)
-            std::memcpy(res, storage_, size_ * sizeof(ElTy) * el_sz_);
-        je_free(storage_);
-        storage_ = res;
+        // could simply be je_realloc(), if the realloc name wasn't redefined here
+        if (storage_) {
+            storage_ = (ElTy *) je_rallocx(storage_, sizeof(ElTy) * capacity_ * el_sz_, 0);
+        } else {
+            storage_ = (ElTy *) je_malloc(sizeof(ElTy) * capacity_ * el_sz_);
+        }
 #else
         // No JEMalloc, no cookies
         ElTy *res = new ElTy[capacity_ * el_sz_];
--- a/src/common/utils/logger/logger_impl.cpp
+++ b/src/common/utils/logger/logger_impl.cpp
@@ -106,17 +106,13 @@ void logger::log(level desired_level, const char* file, size_t line_num, const c
   size_t max_rss;
 
 #ifdef SPADES_USE_JEMALLOC
-  const size_t *cmem = 0;//, *cmem_max = 0;
+  size_t cmem = 0;
   size_t clen = sizeof(cmem);
 
-  je_mallctl("stats.cactive", &cmem, &clen, NULL, 0);
-  //je_mallctl("stats.cactive_max", &cmem_max, &clen, NULL, 0);
-  mem = (*cmem) / 1024;
-  //max_rss = (*cmem_max) / 1024;
-  max_rss = utils::get_max_rss();
-#else
-  max_rss = utils::get_max_rss();
+  je_mallctl("stats.active", (void *)&cmem, &clen, NULL, 0);
+  mem = cmem / 1024;
 #endif
+  max_rss = utils::get_max_rss();
 
   for (auto it = writers_.begin(); it != writers_.end(); ++it)
     (*it)->write_msg(time, mem, max_rss, desired_level, file, line_num, source, msg);
--- a/src/common/utils/memory_limit.cpp
+++ b/src/common/utils/memory_limit.cpp
@@ -83,11 +83,11 @@ size_t get_max_rss() {
 
 size_t get_used_memory() {
 #ifdef SPADES_USE_JEMALLOC
-    const size_t *cmem = 0;
+    size_t cmem;
     size_t clen = sizeof(cmem);
 
-    je_mallctl("stats.cactive", &cmem, &clen, NULL, 0);
-    return *cmem;
+    je_mallctl("stats.active", &cmem, &clen, NULL, 0);
+    return cmem;
 #else
     return get_max_rss();
 #endif
-- 
2.20.1
+1 −0
Original line number Diff line number Diff line
@@ -18,3 +18,4 @@
fix-bool-cast
spelling
gcc7.patch
jemalloc-5-compatibility-fixes.patch