Messages in this thread | | | Date | Tue, 13 Sep 2005 16:10:21 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: [PATCH 2.6.13.1] Patch for invisible threads |
| |
On Tue, 13 Sep 2005, Sripathi Kodi wrote: > > Coming back to the problem of being able to see the threads of a process > whose main thread has done pthread_exit, it appears to me that the only > hurdle is getting the ->fs pointer from task struct. Since all threads of > the process point to the same fs structure, would it be okay if we try to > get it from some other thread? Below is the patch I tried for this:
I don't think this is wrong per se, but you shouldn't take the tasklist lock normally. You're better off just doing
static struct fs_struct *get_fs(struct task_struct *tsk) { struct fs_struct *fs;
task_lock(tsk); fs = task->fs; if (fs) { atomic_inc(&fs->count); task_unlock(tsk); return fs; } task_unlock(tsk);
read_lock(&tasklist_lock); if (pid_alive(tsk)) { struct task_struct *tmp = tsk; while ((tmp = next_thread(tmp)) != tsk) { task_lock(tmp); fs = tmp->fs; if (fs) { atomic_inc(fs->count) task_unlock(tmp); break; } task_unlock(tmp); } } read_unlock(&tasklist_lock); return fs; }
or something like that. You get the idea (totally untested, use at your own risk, if your hair falls off and you get boils, it wasn't my fault).
Linus - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |