On Wed, Jan 07, 2009 at 01:47:16PM +0530, Balbir Singh wrote:
> * Sudhir Kumar <[email protected]> [2009-01-02 17:02:04]:
> 
> > This patch makes the function check_task() capable of checking if a pid
> > other than the calling process is attached to a particlular group. Earlier
> > it was checking for the calling process only.
> > 
> > Signed-off-by: Sudhir Kumar <[email protected]>
> > 
> > ---
> >  tests/functions.c     |   12 ++++++++----
> >  tests/libcgrouptest.h |    2 +-
> >  2 files changed, 9 insertions(+), 5 deletions(-)
> > 
> > Index: trunk/tests/functions.c
> > ===================================================================
> > --- trunk.orig/tests/functions.c
> > +++ trunk/tests/functions.c
> > @@ -83,11 +83,11 @@ void test_cgroup_attach_task(int retcode
> >             build_path(tasksfile, mountpoint,
> >                                      group1, "tasks");
> > 
> > -           if (check_task(tasksfile)) {
> > +           if (check_task(tasksfile, 0)) {
> >                     if (fs_mounted == 2) { /* multiple mounts */
> >                             build_path(tasksfile2, mountpoint2,
> >                                                      group2, "tasks");
> > -                           if (check_task(tasksfile2)) {
> > +                           if (check_task(tasksfile2, 0)) {
> >                                     message(i, PASS, "attach_task()",
> >                                              retval, info[TASKINGRP]);
> >                             } else {
> > @@ -495,7 +495,7 @@ int check_fsmounted(int multimnt)
> >     return 1;
> >  }
> > 
> > -int check_task(char *tasksfile)
> > +int check_task(char *tasksfile, pid_t pid)
> >  {
> >     FILE *file;
> >     pid_t curr_tid, tid;
> > @@ -508,7 +508,11 @@ int check_task(char *tasksfile)
> >             exit(1);
> >     }
> > 
> > -   curr_tid = cgrouptest_gettid();
> > +   if (pid)
> > +           curr_tid = pid;
> > +   else
> > +           curr_tid = cgrouptest_gettid();
> > +
> 
> This is a bit confusing and I think I understand your previous patch
> as well now, pid is a boolean + pid value. If not set, it means
> default tid, else take the passed pid. Remember pid 0 is valid, all
> though it is not explicitly used from user space or exported to it.
> 
> I don't like this style of assuming that pid "0" is invalid or means
> current tid, I would rather pass it explictly from the callers.
> 

Balbir, pid 0 in terms of cgroups implies the current process. I am
quite fine with this. Also, if you notice, he does a gettid() to get the
pid of the current process to check if it is in the tasks file or not.

which reminds me, it might be a nice optimization in the library as
well. If we want to move the current task, we use 0 instead of doing a
gettid()

> >     while (!feof(file)) {
> >             fscanf(file, "%u", &tid);
> >             if (tid == curr_tid) {
> > Index: trunk/tests/libcgrouptest.h
> > ===================================================================
> > --- trunk.orig/tests/libcgrouptest.h
> > +++ trunk/tests/libcgrouptest.h
> > @@ -138,7 +138,7 @@ struct cgroup *new_cgroup(char *group, c
> >      char *control_file, int value_type, struct cntl_val_t cval,
> >                                      struct uid_gid_t ids, int i);
> >  int check_fsmounted(int multimnt);
> > -int check_task(char *tasksfile);
> > +int check_task(char *tasksfile, pid_t pid);
> >  /* function to print messages in better format */
> >  void message(int num, int pass, const char *api,
> >                                              int ret, char *extra);
> > 
> > 
> > 
> 
> -- 
>       Balbir

-- 
regards,
Dhaval

------------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It is the best place to buy or sell services for
just about anything Open Source.
http://p.sf.net/sfu/Xq1LFB
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to