Hi,

Alessandro Ghedini wrote:

> See attached diff against upstream procps version 3.2.8, which is the version
> that, AFAICT, ulatencyd embeds.

Hm.  Does upstream have any hints about this?  My first guess would
be that the imported copy of procps was distro-patched.

[...]
> +++ /home/ale/devel/debian/pkg-collab/packages/ulatencyd/src/proc/alloc.c     
> 2012-07-04 16:37:32.104710221 +0200
[...]
> @@ -26,6 +27,7 @@
>      if (size == 0)
>          ++size;
>      p = malloc(size);
> +    memset(p, 0, size);
>      if (!p) {
>       fprintf(stderr, "xmalloc: malloc(%d) failed", size);
>       perror(NULL);

>From ulatencyd commit 518a9672 "finish lua filter code", 2010-12-20.
Making xmalloc() act like calloc doesn't make much sense except as a
temporary workaround to a buggy caller.

[...]
> +++ /home/ale/devel/debian/pkg-collab/packages/ulatencyd/src/proc/readproc.c  
> 2012-07-04 16:37:32.104710221 +0200
[...]
>    static const unsigned char asso[] =
>      {
> -      61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
> -      61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
> +      66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
> +      66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
[...]

procps commit 5f570a84 "per-process swap info available on Linux
2.6.34", 2010-05-18.

>      };
>  
>      static const status_table_struct table[] = {
> -      F(VmStk)
> +      F(Pid)
[...]
> @@ -157,6 +163,9 @@
>      P->vm_exe  = 0;
>      P->vm_lib  = 0;
>      P->nlwp    = 0;
> +    P->nsupgid = 0;
> +    P->supgid = NULL;
> +    P->supgrp = NULL;

Seems to have been implemented differently by procps commit 3ef4823f
"supgid/supgrp support, improved library interface", 2011-08-01.

>      P->signal[0] = '\0';  // so we can detect it as missing for very old 
> kernels
>  
>      goto base;
> @@ -173,7 +182,9 @@
>          // examine a field name (hash and compare)
>      base:
>          if(unlikely(!*S)) break;
> -        entry = table[63 & (asso[S[3]] + asso[S[2]] + asso[S[0]])];
> +        hash = asso[S[3]] + asso[S[2]] + asso[S[0]];
> +        if (hash > 65) continue;
> +        entry = table[hash];

Specific to ulatencyd, and already present in its 2010-12-19 initial
import.

[...]
> @@ -271,6 +282,21 @@
>          P->sgid = strtol(S,&S,10);
>          P->fgid = strtol(S,&S,10);
>          continue;
> +    case_Groups:
> +        isupgid = 0;
> +        if (*S != '\n'){ // Is there any supplementary group ?
> +          P->supgid = (int *) xmalloc(0x0004 * sizeof(int));
> +          int vctsize = 0x0004;
> +          while (S[1] != '\n' && isupgid<INT_MAX){ // There is one blank 
> before '\n'
> +            if (isupgid == vctsize){
> +              vctsize *= 2;
> +              P->supgid = (int *)xrealloc(P->supgid,vctsize * sizeof(int));
> +            }
> +            P->supgid[isupgid++] = strtol(S,&S,10);
> +            P->nsupgid++;
> +          }
> +        }
> +        continue;

Implemented differently in procps commit 3ef4823f.

> @@ -407,7 +433,7 @@
>  /*    fprintf(stderr, "statm2proc converted %d fields.\n",num); */
>  }
>  
> -static int file2str(const char *directory, const char *what, char *ret, int 
> cap) {
> +int file2str(const char *directory, const char *what, char *ret, int cap) {

Exposing a private function, present since the beginning of the
history described in the ulatencyd repo.

> @@ -421,7 +447,7 @@
>      return num_read;
>  }
>  
> -static char** file2strvec(const char* directory, const char* what) {
> +char** file2strvec_ext(const char* directory, const char* what, char 
> terminator) {

ulatencyd commit 1191b159 "add cgroups_origin and exit filter call",
2011-02-08.

[...]
> @@ -589,6 +622,13 @@
>          }
>      }
>  
> +    if (flags & PROC_FILLSUPGRP && p->nsupgid > 0){
> +        allocsupgrp(p);
> +        int i;
> +        for (i=0; i < p->nsupgid; i++)
> +            memcpy(p->supgrp[i], group_from_gid(p->supgid[i]), P_G_SZ);
> +    }
> +

Different from the procps version.

[...]
> @@ -599,6 +639,17 @@
>      else
>          p->environ = NULL;
>      
> +    if(linux_version_code>=LINUX_VERSION(2,6,24) && (flags & 
> PROC_FILLCGROUP)) {
> +     p->cgroup = file2strvec_ext(path, "cgroup", '\n');      /* read 
> /proc/#/cgroup */
> +     if(p->cgroup && *p->cgroup) {
> +             int i = strlen(*p->cgroup);
> +             if( (*p->cgroup)[i-1]=='\n' )
> +                     (*p->cgroup)[i-1] = ' '; //little hack to remove 
> trailing \n
> +     }

Done differently in procps upstream.

[... etc ...]

Hope that helps,
Jonathan


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to