On Wednesday 30 April 2014 12:14 PM, Mohammad Merajul Islam Molla wrote:
Hello,

I would like to share two observations -

1. Is it necessary to initialize nrcpus = 2 anymore?

thanks, ack

2. Another problem may happen in the code below where waitpid is called -

  for (i = 0; i < nrcpus; i++) {
                 int status;

                 waitpid(pids[i], &status, 0);
                 if (status != 0) {
                         fprintf(stderr, "test for cpu %d has failed\n", i);
                         ret = 1;
                 }
         }

    Since for offline cpus, no child process is created, now these cpus
pid[i]'s will be zero (due to calloc). This will change the meaning of
waitpid function as man page says -

     pid 0  -    meaning wait for any child process whose process group
ID is equal to that of the calling process.

   I think a check should be added before waitpid call -

     if (pids[i] != 0)
             waitpid(pids[i], &status, 0);

Here Parent will not wait for child infinitely if status is not visible, the option argument is 0(NOHANG). I will add the macro for readability. thanks


​--​
​Thanks,
-Meraj​


On Wed, Apr 30, 2014 at 11:08 AM, Sanjay Singh Rawat
<sanjay.ra...@linaro.org <mailto:sanjay.ra...@linaro.org>> wrote:

    currently percpu process array is set to 2, which results in segfault

    Signed-off-by: Sanjay Singh Rawat <sanjay.ra...@linaro.org
    <mailto:sanjay.ra...@linaro.org>>
    ---
      cpuidle/cpuidle_killer.c |    7 ++++++-
      1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/cpuidle/cpuidle_killer.c b/cpuidle/cpuidle_killer.c
    index 5e7320f..09009ef 100644
    --- a/cpuidle/cpuidle_killer.c
    +++ b/cpuidle/cpuidle_killer.c
    @@ -104,7 +104,7 @@ int main(int argc, char *argv[])
      {
             int ret, i, nrcpus = 2;
             int nrsleeps, delay;
    -       pid_t pids[nrcpus];
    +       pid_t *pids;
             struct timex timex = { 0 };

             if (adjtimex(&timex) < 0) {
    @@ -121,6 +121,11 @@ int main(int argc, char *argv[])
             }

             fprintf(stderr, "found %d cpu(s)\n", nrcpus);
    +       pids = (pid_t *) calloc(nrcpus, sizeof(pid_t));
    +       if (pids == NULL) {
    +               fprintf(stderr, "error: calloc failed\n");
    +               return 1;
    +       }

             for (i = 0; i < nrcpus; i++) {

    --
    1.7.10.4


    _______________________________________________
    linaro-dev mailing list
    linaro-dev@lists.linaro.org <mailto:linaro-dev@lists.linaro.org>
    http://lists.linaro.org/mailman/listinfo/linaro-dev




--
sanjay

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to