James Addison dixit:

>... to add something like this:

Ouch, by going via a string?! I wouldn’t have thought of that…

>  if (!(flags & ProcessInitializationFlags::kNoAdjustResourceLimits)) {
>    struct rlimit lim;
>    if (getrlimit(RLIMIT_STACK, &lim) == 0) {
>      char stackSize[32];

32 is magic and may also be wrong here.

>      int buflen = snprintf(stackSize, sizeof(stackSize),
>"--stack-size=%d", lim.rlim_cur);

%d isn’t right for lim.rlim_cur, which is of type rlim_t.
--stack-size seems to take in KiB, and we’d want a reserve.

>      if (buflen < sizeof(stackSize)) {
>        V8::SetFlagsFromString(stackSize, buflen);
>      }
>    }
>  }


So, taking your next post into account, probably something more
like this:

#define V8_STACK_RESERVE 128
if (!(flags & ProcessInitializationFlags::kNoAdjustResourceLimits)) {
        struct rlimit lim;
        char stackSize[sizeof("--stack-size=") + /* 2³¹ */ 10];

        if (getrlimit(RLIMIT_STACK, &lim))
                fprintf(stderr, "W: stack size adjustment: cannot get 
RLIMIT_STACK\n");
        else if (lim.rlim_cur == RLIM_INFINITY)
                fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is 
unlimited\n");
        else if ((lim.rlim_cur /= 1024) <= V8_STACK_RESERVE)
                fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is too 
small\n");
        else if ((lim.rlim_cur -= V8_STACK_RESERVE) >= /* 2³¹ */ 2147483647)
                fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is too 
large\n");
        else
                V8::SetFlagsFromString(stackSize, snprintf(stackSize, 
sizeof(stackSize),
                    "--stack-size=%d", (int)lim.rlim_cur));
}

Untested, still not back to full health, take with grains of salt.

bye,
//mirabilos
-- 
In traditional syntax ' is ignored, but in c99 everything between two ' is
handled as character constant.  Therefore you cannot use ' in a preproces-
sing file in c99 mode.  -- Ragge
No faith left in ISO C99, undefined behaviour, etc.

Reply via email to