Fixes a panic triggered by threaded Linux applications when running

with RACCT/RCTL enabled.

Reviewed by:	ngie@, ed@
Tested by:	Larry Rosenman <ler@lerctr.org>
MFC after:	1 month
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D3470
This commit is contained in:
trasz 2015-09-02 14:04:13 +00:00
parent 45daa15283
commit e6a94eac4e

View File

@ -285,10 +285,20 @@ linux_clone_thread(struct thread *td, struct linux_clone_args *args)
p = td->td_proc;
#ifdef RACCT
if (racct_enable) {
PROC_LOCK(p);
error = racct_add(p, RACCT_NTHR, 1);
PROC_UNLOCK(p);
if (error != 0)
return (EPROCLIM);
}
#endif
/* Initialize our td */
error = kern_thr_alloc(p, 0, &newtd);
if (error)
return (error);
goto fail;
cpu_set_upcall(newtd, td);
@ -369,6 +379,16 @@ linux_clone_thread(struct thread *td, struct linux_clone_args *args)
td->td_retval[0] = newtd->td_tid;
return (0);
fail:
#ifdef RACCT
if (racct_enable) {
PROC_LOCK(p);
racct_sub(p, RACCT_NTHR, 1);
PROC_UNLOCK(p);
}
#endif
return (error);
}
int