DragonFly bugs List (threaded) for 2007-07
DragonFly BSD
DragonFly bugs List (threaded) for 2007-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: system freeze on objcache_get


From: "Simon 'corecode' Schubert" <corecode@xxxxxxxxxxxx>
Date: Mon, 30 Jul 2007 14:49:30 +0200

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



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]