On Tue, Aug 15, 2006 at 11:49:19AM -0400, John Baldwin wrote: > On Tuesday 15 August 2006 11:20, Suleiman Souhlal wrote: > > John Baldwin wrote: > > > > > >>+ KASSERT(em != NULL, ("proc_init: emuldata not found in exec case.\n")); > > >>+ } > > >>+ > > >>+ em->child_clear_tid = NULL; > > >>+ em->child_set_tid = NULL; > > >>+ > > >>+ /* allocate the shared struct only in clone()/fork cases > > >>+ * in the case of clone() td = calling proc and child = pid of > > >>+ * the newly created proc > > >>+ */ > > >>+ if (child != 0) { > > >>+ if (flags & CLONE_VM) { > > >>+ /* lookup the parent */ > > >>+ p_em = em_find(td->td_proc, EMUL_LOCKED); > > >>+ KASSERT(p_em != NULL, ("proc_init: parent emuldata not found for > > >>CLONE_VM\n")); > > >>+ em->shared = p_em->shared; > > >>+ em->shared->refs++; > > >> > > >>This is unsafe. Please use the functions in sys/refcount.h. > > > > > > > > > Well, in this case he's already holding a lock. If he always holds a lock > > > when accessing and modifying refs, then refcount_*() would only add > overhead. > > > > Isn't he holding the wrong lock (emul_lock vs emul_shared_lock)? > > Maybe. I think those should be merged into one lock anyway. :) it used to be one lock, but it caused more problems then now... pls, let me fix all the issue and then judge, ok? :)Received on Tue Aug 15 2006 - 14:30:29 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:59 UTC