Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
is_single_threaded.c
Go to the documentation of this file.
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 (
[email protected]
)
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
* Returns true if the task does not share ->mm with another thread/process.
17
*/
18
bool
current_is_single_threaded
(
void
)
19
{
20
struct
task_struct
*
task
=
current
;
21
struct
mm_struct
*mm = task->
mm
;
22
struct
task_struct
*
p
, *
t
;
23
bool
ret
;
24
25
if
(
atomic_read
(&task->
signal
->live) != 1)
26
return
false
;
27
28
if
(
atomic_read
(&mm->
mm_users
) == 1)
29
return
true
;
30
31
ret =
false
;
32
rcu_read_lock();
33
for_each_process
(p) {
34
if
(
unlikely
(p->
flags
&
PF_KTHREAD
))
35
continue
;
36
if
(
unlikely
(p == task->
group_leader
))
37
continue
;
38
39
t =
p
;
40
do
{
41
if
(
unlikely
(t->
mm
== mm))
42
goto
found;
43
if
(
likely
(t->
mm
))
44
break
;
45
/*
46
* t->mm == NULL. Make sure next_thread/next_task
47
* will see other CLONE_VM tasks which might be
48
* forked before exiting.
49
*/
50
smp_rmb
();
51
}
while_each_thread
(p, t);
52
}
53
ret =
true
;
54
found:
55
rcu_read_unlock();
56
57
return
ret
;
58
}
Generated on Thu Jan 10 2013 14:55:39 for Linux Kernel by
1.8.2