ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h in ruby-eigen-0.0.11.pre1 vs ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h in ruby-eigen-0.0.11.pre2

- old
+ new

@@ -285,10 +285,11 @@ #endif // EIGEN_PARSED_BY_DOXYGEN protected: template<class SizesType> inline void reserveInnerVectors(const SizesType& reserveSizes) { + rubyeigen_gc_add_count(m_outerSize * sizeof(Index)); if(isCompressed()) { std::size_t totalReserveSize = 0; // turn the matrix into non-compressed mode m_innerNonZeros = static_cast<Index*>(std::malloc(m_outerSize * sizeof(Index))); @@ -477,10 +478,11 @@ /** Turns the matrix into the uncompressed mode */ void uncompress() { if(m_innerNonZeros != 0) return; + rubyeigen_gc_add_count(m_outerSize * sizeof(Index)); m_innerNonZeros = static_cast<Index*>(std::malloc(m_outerSize * sizeof(Index))); for (Index i = 0; i < m_outerSize; i++) { m_innerNonZeros[i] = m_outerIndex[i+1] - m_outerIndex[i]; } @@ -553,10 +555,11 @@ m_innerNonZeros[i] = 0; } else if (innerChange < 0) { // Inner size decreased: allocate a new m_innerNonZeros + rubyeigen_gc_add_count(m_outerSize * sizeof(Index)); m_innerNonZeros = static_cast<Index*>(std::malloc((m_outerSize+outerChange+1) * sizeof(Index))); if (!m_innerNonZeros) internal::throw_std_bad_alloc(); for(Index i = 0; i < m_outerSize; i++) m_innerNonZeros[i] = m_outerIndex[i+1] - m_outerIndex[i]; } @@ -599,9 +602,10 @@ m_innerSize = IsRowMajor ? cols : rows; m_data.clear(); if (m_outerSize != outerSize || m_outerSize==0) { std::free(m_outerIndex); + rubyeigen_gc_add_count(outerSize * sizeof(Index)); m_outerIndex = static_cast<Index*>(std::malloc((outerSize + 1) * sizeof(Index))); if (!m_outerIndex) internal::throw_std_bad_alloc(); m_outerSize = outerSize; }