system freeze on objcache_get
Simon 'corecode' Schubert
corecode at fs.ei.tum.de
Mon Jul 30 05:50:39 PDT 2007
Simon 'corecode' Schubert wrote:
In total, there are just 5 rounds in all magazines: one each in
loaded_magazine on CPUs 0,1,2 and two in previous_magazine on CPU2.
So my question now is: where did all the allocated objects go?
Answer: they were never freed:
There were exactly 59 less frees than there were allocs (checked by looking at get/put_cummulative).
So, where'd it go?
if (error == 0) {
error = exec_copyin_args(&args, uap->fname, PATH_USERSPACE,
uap->argv, uap->envv);
}
if (error == 0)
error = kern_execve(&nd, &args);
nlookup_done(&nd);
exec_free_args(&args);
must be in kern_execve, right? but how so?
in kern_execve...
exec_fail:
/*
* we're done here, clear P_INEXEC if we were the ones that
* set it. Otherwise if vmspace_destroyed is still set we
* raced another thread and that thread is responsible for
* clearing it.
*/
if (imgp->vmspace_destroyed & 2)
p->p_flag &= ~P_INEXEC;
if (imgp->vmspace_destroyed) {
/* sorry, no more process anymore. exit gracefully */
exit1(W_EXITCODE(0, SIGABRT)); <<<<<<<< BIATCH
/* NOT REACHED */
return(0);
} else {
return(error);
}
}
there we go. turns out cperciva fixed that in freebsd in 2005, rev. 1.277. fix will arrive now in dragonfly as well.
cheers + hope to see you again in this cinema.
simon
More information about the Bugs
mailing list