linux/lib/is_single_threaded.c
<<
>>
Prefs
   1/* Function to determine if a thread group is single threaded or not
   2 *
   3 * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
   4 * Written by David Howells (dhowells@redhat.com)
   5 * - Derived from security/selinux/hooks.c
   6 *
   7 * This program is free software; you can redistribute it and/or
   8 * modify it under the terms of the GNU General Public Licence
   9 * as published by the Free Software Foundation; either version
  10 * 2 of the Licence, or (at your option) any later version.
  11 */
  12
  13#include <linux/sched.h>
  14
  15/**
  16 * is_single_threaded - Determine if a thread group is single-threaded or not
  17 * @p: A task in the thread group in question
  18 *
  19 * This returns true if the thread group to which a task belongs is single
  20 * threaded, false if it is not.
  21 */
  22bool is_single_threaded(struct task_struct *p)
  23{
  24        struct task_struct *g, *t;
  25        struct mm_struct *mm = p->mm;
  26
  27        if (atomic_read(&p->signal->count) != 1)
  28                goto no;
  29
  30        if (atomic_read(&p->mm->mm_users) != 1) {
  31                read_lock(&tasklist_lock);
  32                do_each_thread(g, t) {
  33                        if (t->mm == mm && t != p)
  34                                goto no_unlock;
  35                } while_each_thread(g, t);
  36                read_unlock(&tasklist_lock);
  37        }
  38
  39        return true;
  40
  41no_unlock:
  42        read_unlock(&tasklist_lock);
  43no:
  44        return false;
  45}
  46
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.