sys__lwp_create: put newuc back to the pool on failure.
This commit is contained in:
parent
7db024f8e7
commit
87dd042f7a
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: kern_lwp.c,v 1.39 2006/07/30 21:58:11 ad Exp $ */
|
/* $NetBSD: kern_lwp.c,v 1.40 2006/08/14 14:11:21 ad Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
* Copyright (c) 2001 The NetBSD Foundation, Inc.
|
||||||
@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.39 2006/07/30 21:58:11 ad Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: kern_lwp.c,v 1.40 2006/08/14 14:11:21 ad Exp $");
|
||||||
|
|
||||||
#include "opt_multiprocessor.h"
|
#include "opt_multiprocessor.h"
|
||||||
|
|
||||||
@ -90,13 +90,16 @@ sys__lwp_create(struct lwp *l, void *v, register_t *retval)
|
|||||||
|
|
||||||
error = copyin(SCARG(uap, ucp), newuc,
|
error = copyin(SCARG(uap, ucp), newuc,
|
||||||
l->l_proc->p_emul->e_sa->sae_ucsize);
|
l->l_proc->p_emul->e_sa->sae_ucsize);
|
||||||
if (error)
|
if (error) {
|
||||||
|
pool_put(&lwp_uc_pool, newuc);
|
||||||
return (error);
|
return (error);
|
||||||
|
}
|
||||||
|
|
||||||
/* XXX check against resource limits */
|
/* XXX check against resource limits */
|
||||||
|
|
||||||
inmem = uvm_uarea_alloc(&uaddr);
|
inmem = uvm_uarea_alloc(&uaddr);
|
||||||
if (__predict_false(uaddr == 0)) {
|
if (__predict_false(uaddr == 0)) {
|
||||||
|
pool_put(&lwp_uc_pool, newuc);
|
||||||
return (ENOMEM);
|
return (ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,8 +123,10 @@ sys__lwp_create(struct lwp *l, void *v, register_t *retval)
|
|||||||
|
|
||||||
error = copyout(&l2->l_lid, SCARG(uap, new_lwp),
|
error = copyout(&l2->l_lid, SCARG(uap, new_lwp),
|
||||||
sizeof(l2->l_lid));
|
sizeof(l2->l_lid));
|
||||||
if (error)
|
if (error) {
|
||||||
|
/* XXX We should destroy the LWP. */
|
||||||
return (error);
|
return (error);
|
||||||
|
}
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user