diff --git a/libs/main/containers/picontainers.cpp b/libs/main/containers/picontainers.cpp index 7024d41f..f75eed09 100644 --- a/libs/main/containers/picontainers.cpp +++ b/libs/main/containers/picontainers.cpp @@ -23,7 +23,7 @@ const size_t minAlloc = 64; -const size_t maxPoTAlloc = 4_MiB; +const size_t maxPoTAlloc = 64_MiB; size_t _PIContainerConstantsBase::calcMinCountPoT(size_t szof) { @@ -39,10 +39,12 @@ size_t _PIContainerConstantsBase::calcMinCountPoT(size_t szof) { size_t _PIContainerConstantsBase::calcMaxCountForPoT(size_t szof) { + // printf("calcMaxCountForPoT sizeof = %d, size = %d\n", szof, maxPoTAlloc / szof); return maxPoTAlloc / szof; } size_t _PIContainerConstantsBase::calcStepAfterPoT(size_t szof) { + // printf("calcStepAfterPoT sizeof = %d, size = %d\n", szof, calcMaxCountForPoT(szof)); return calcMaxCountForPoT(szof); } diff --git a/libs/main/containers/pideque.h b/libs/main/containers/pideque.h index 03c3ff76..0b943107 100644 --- a/libs/main/containers/pideque.h +++ b/libs/main/containers/pideque.h @@ -2575,17 +2575,25 @@ private: pid_data = nullptr; } - inline size_t asize(ssize_t s) { - if (s <= 0) return 0; - if (pid_rsize * 2 >= size_t(s) && pid_rsize < size_t(s)) { - return pid_rsize * 2; + inline size_t asize(ssize_t ss) { + if (ss <= 0) return 0; + size_t s = ss; + if (s <= _PIContainerConstants::maxCountForPoT()) { + if (pid_rsize * 2 >= s && pid_rsize < s) { + return pid_rsize * 2; + } + ssize_t t = _PIContainerConstants::minCountPoT(); + s -= 1; + while (s >> t) + ++t; + return (1 << t); + } else { + size_t ret = pid_rsize; + while (ret < s) + ret += _PIContainerConstants::stepAfterPoT(); + return ret; } - size_t t = _PIContainerConstants::minCountPoT(); - s -= 1; - while (s >> t) { - ++t; - } - return (1 << t); + return 0; } template::value, int>::type = 0> diff --git a/libs/main/containers/pivector.h b/libs/main/containers/pivector.h index 781ec49c..96d023ef 100644 --- a/libs/main/containers/pivector.h +++ b/libs/main/containers/pivector.h @@ -2461,14 +2461,22 @@ private: inline size_t asize(size_t s) { if (s == 0) return 0; - if (piv_rsize * 2 >= s && piv_rsize < s) { - return piv_rsize * 2; + if (s <= _PIContainerConstants::maxCountForPoT()) { + if (piv_rsize * 2 >= s && piv_rsize < s) { + return piv_rsize * 2; + } + ssize_t t = _PIContainerConstants::minCountPoT(); + s -= 1; + while (s >> t) + ++t; + return (1 << t); + } else { + size_t ret = piv_rsize; + while (ret < s) + ret += _PIContainerConstants::stepAfterPoT(); + return ret; } - ssize_t t = _PIContainerConstants::minCountPoT(); - s -= 1; - while (s >> t) - ++t; - return (1 << t); + return 0; } template::value, int>::type = 0> diff --git a/utils/system_daemon/main.cpp b/utils/system_daemon/main.cpp index bb0d239a..751e05f3 100755 --- a/utils/system_daemon/main.cpp +++ b/utils/system_daemon/main.cpp @@ -360,7 +360,6 @@ void usage() { int main(int argc, char * argv[]) { - sys_mon.startOnSelf(); // piDebug = false; PICLI cli(argc, argv); cli.addArgument("help"); @@ -375,6 +374,7 @@ int main(int argc, char * argv[]) { usage(); return 0; } + sys_mon.startOnSelf(); PIString name = cli.argumentValue("name"); PIString sip = cli.argumentValue("address"); PISingleApplication * sapp = 0;