提交 1ec320af 编写于 作者: C Cedric Le Goater 提交者: Linus Torvalds

[PATCH] add process_session() helper routine: deprecate old field

Add an anonymous union and ((deprecated)) to catch direct usage of the
session field.

[akpm@osdl.org: fix various missed conversions]
[jdike@addtoit.com: fix UML bug]
Signed-off-by: NJeff Dike <jdike@addtoit.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 937949d9
......@@ -3855,7 +3855,7 @@ EXPORT_SYMBOL(proc_clear_tty);
void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
{
if (tty) {
tty->session = tsk->signal->session;
tty->session = process_session(tsk);
tty->pgrp = process_group(tsk);
}
tsk->signal->tty = tty;
......
......@@ -381,7 +381,7 @@ static int do_task_stat(struct task_struct *task, char * buffer, int whole)
stime = cputime_add(stime, sig->stime);
}
sid = sig->session;
sid = signal_session(sig);
pgid = process_group(task);
ppid = rcu_dereference(task->real_parent)->tgid;
......
......@@ -57,17 +57,18 @@
.cpu_vm_mask = CPU_MASK_ALL, \
}
#define INIT_SIGNALS(sig) { \
.count = ATOMIC_INIT(1), \
#define INIT_SIGNALS(sig) { \
.count = ATOMIC_INIT(1), \
.wait_chldexit = __WAIT_QUEUE_HEAD_INITIALIZER(sig.wait_chldexit),\
.shared_pending = { \
.shared_pending = { \
.list = LIST_HEAD_INIT(sig.shared_pending.list), \
.signal = {{0}}}, \
.signal = {{0}}}, \
.posix_timers = LIST_HEAD_INIT(sig.posix_timers), \
.cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \
.rlim = INIT_RLIMITS, \
.pgrp = 1, \
.session = 1, \
.tty_old_pgrp = 0, \
{ .__session = 1}, \
}
extern struct nsproxy init_nsproxy;
......
......@@ -436,7 +436,12 @@ struct signal_struct {
/* job control IDs */
pid_t pgrp;
pid_t tty_old_pgrp;
pid_t session;
union {
pid_t session __deprecated;
pid_t __session;
};
/* boolean value for session group leader */
int leader;
......@@ -1047,9 +1052,19 @@ static inline pid_t process_group(struct task_struct *tsk)
return tsk->signal->pgrp;
}
static inline pid_t signal_session(struct signal_struct *sig)
{
return sig->__session;
}
static inline pid_t process_session(struct task_struct *tsk)
{
return tsk->signal->session;
return signal_session(tsk->signal);
}
static inline void set_signal_session(struct signal_struct *sig, pid_t session)
{
sig->__session = session;
}
static inline struct pid *task_pid(struct task_struct *task)
......
......@@ -304,7 +304,7 @@ void __set_special_pids(pid_t session, pid_t pgrp)
if (process_session(curr) != session) {
detach_pid(curr, PIDTYPE_SID);
curr->signal->session = session;
set_signal_session(curr->signal, session);
attach_pid(curr, PIDTYPE_SID, session);
}
if (process_group(curr) != pgrp) {
......
......@@ -1259,7 +1259,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
if (thread_group_leader(p)) {
p->signal->tty = current->signal->tty;
p->signal->pgrp = process_group(current);
p->signal->session = process_session(current);
set_signal_session(p->signal, process_session(current));
attach_pid(p, PIDTYPE_PGID, process_group(p));
attach_pid(p, PIDTYPE_SID, process_session(p));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册