On Wed, Jul 3, 2013 at 3:49 PM, Stefan Hajnoczi <stefa...@redhat.com> wrote: > On Wed, Jul 03, 2013 at 11:41:19AM +0800, liu ping fan wrote: >> On Mon, Jul 1, 2013 at 7:50 PM, Stefan Hajnoczi <stefa...@gmail.com> wrote: >> > On Thu, Jun 20, 2013 at 05:14:56PM +0800, liu ping fan wrote: >> >> On Tue, Jun 18, 2013 at 8:41 PM, Stefan Hajnoczi <stefa...@gmail.com> >> >> wrote: >> >> > On Thu, Jun 13, 2013 at 05:03:03PM +0800, Liu Ping Fan wrote: >> >> >> @@ -1109,6 +1146,7 @@ void net_cleanup(void) >> >> >> qemu_del_net_client(nc); >> >> >> } >> >> >> } >> >> >> + qemu_mutex_destroy(&net_clients_lock); >> >> > >> >> > Why is it okay to iterate over net_clients here without the lock? >> >> >> >> atexit(&net_cleanup); So no other racers exist. >> > >> > What about dataplane? The device may not be reset when net_cleanup runs. >> > >> Does the func registered by atexit run after all of the other threads >> terminate? > > I imagine that atexit(3) runs while detached threads are still alive, > but I'm not sure about the exact rules. The pthread specification links > I found online didn't state the rules. > Haha, finally, got some hint for this. pthread_exit(3) says: After the last thread in a process terminates, the process terminates as by calling exit(3) with an exit status of zero; thus, process-shared resources are released and functions registered using atexit(3) are called.
Regards, Pingfan > Stefan