# HG changeset patch # User John W. Eaton # Date 1204012076 18000 # Node ID 493bb0de319977ab89626f0752e7c63ea7b24da1 # Parent c9a476b1e6646ddec0e6efb310437d945f6e593b avoid another xGELSD workspace query bug diff -r c9a476b1e664 -r 493bb0de3199 liboctave/CMatrix.cc --- a/liboctave/CMatrix.cc Tue Feb 26 02:16:32 2008 -0500 +++ b/liboctave/CMatrix.cc Tue Feb 26 02:47:56 2008 -0500 @@ -2486,6 +2486,13 @@ if (std::real (work(0)) < lworkaround) work(0) = lworkaround; } + else if (m >= n) + { + octave_idx_type lworkaround = 2*m + m*nrhs; + + if (std::real (work(0)) < lworkaround) + work(0) = lworkaround; + } lwork = static_cast (std::real (work(0))); work.resize (lwork); diff -r c9a476b1e664 -r 493bb0de3199 liboctave/ChangeLog --- a/liboctave/ChangeLog Tue Feb 26 02:16:32 2008 -0500 +++ b/liboctave/ChangeLog Tue Feb 26 02:47:56 2008 -0500 @@ -1,3 +1,8 @@ +2008-02-26 John W. Eaton + + * dMatrix.cc (Matrix::lssolve): Avoid another dgelsd lwork query bug. + * CMatrix.cc (ComplexMatrix::lssolve): Likewise, for zgelsd + 2008-02-24 John W. Eaton * oct-inttypes.h (octave_int_helper): New class. Provide diff -r c9a476b1e664 -r 493bb0de3199 liboctave/dMatrix.cc --- a/liboctave/dMatrix.cc Tue Feb 26 02:16:32 2008 -0500 +++ b/liboctave/dMatrix.cc Tue Feb 26 02:47:56 2008 -0500 @@ -2095,6 +2095,14 @@ if (work(0) < lworkaround) work(0) = lworkaround; } + else if (m >= n) + { + octave_idx_type lworkaround + = 12*n + 2*n*smlsiz + 8*n*nlvl + n*nrhs + (smlsiz+1)*(smlsiz+1); + + if (work(0) < lworkaround) + work(0) = lworkaround; + } lwork = static_cast (work(0)); work.resize (lwork);